状态管理,session与cookie
什么是状态管理?
将客户端(一般是浏览器)与服务器之间的多次交互当作一个整体来看待,即将多次操作所涉及的数据记录下来。
怎样进行状态管理?
第一种方式:cookie(在客户端管理用户的状态)
第二种方式:session(在服务器端管理用户的状态)
关于cookie:
什么是cookie?浏览器在访问服务器时,服务器将一些数据以set-cookie消息头的形式发送给浏览器,浏览器会将这些数据保存起来,当浏览器再次访问服务器时,会将这些数据以cookie消息头的形式发送给服务器。通过这种方式,可以管理用户的状态。cookie的值只能是ascii字符,如果是中文,需要将中文转化成ascii字符形式。cookie的路径问题:浏览器在向服务器上的某个地址发送请求时,会先比较cookie的路径和请求的地址是否匹配,只有匹配的cookie,才会发送。cookie的路径可以通过cookie.setPath(String path)方法来设置。如果没有设置,则有一个缺省的值,该缺省值通常是生成该cookie的组件的路径。比如:/appname/addCookie保存了一个cookie,则该cookie的路径就是:/appname/addCookie。规则:cookie的路径必须是要访问的路径的上层目录或者与要访问的路径相等,浏览器才会将cookie发送给服务器。一般可以设置为:setPath("/appname"),表示访问该应用下的所有地址,均会发送cookie。cookie的限制:1、cookie可以被禁止。2、cookie的大小有限制(4K左右)3、cookie的数量也有限制(浏览器大概能保存300个左右)4、cookie的值只能是字符串(需要考虑编码问题)5、cookie不安全!
关于session:
什么是session?浏览器访问服务器时,服务器会创建一个session对象(该对象有一个唯一的Id,一般称为sessionId)。服务器在缺省情况下,会将sessionId以cookie机制发送给浏览器。当浏览器再次访问服务器时,会将sessionId发送给服务器,服务器依据sessionId就可以找到该session对象,通过这种方式,也可以管理用户的状态。
cookie禁止后如何使用session?
使用url重写机制。即如果要访问的web组件(JSP/servlet)需要session机制的支持,那么不能够直接输入该web组件的地址,而应该使用服务器生成的包含有sessionId的地址。如何生成包含有sessionId的地址?方式1(适用于链接,表单提交)、response.encodeURL(String url);方式2(使用于重定向)、response.encodeRedirectURL(String url);