您的位置:首页 > 编程语言 > Java开发

Java使用cookie和session管理用户状态

2016-04-13 12:04 645 查看
           一个做移动端的,要做服务端的一些工作,没办法,工作还的继续,这就是生活,废话不说,总结一下这一天的东西,逆水行舟,努力,努力。

          Java什么是状态管理

   一般我们会将浏览器与服务器之间多次的交互当作一个整体来对待,所以将这多次操作所涉及的数据记录保存下来,就是用户状态的一种管理。

   Java中状态的管理方式,一般有两种,一种是在cookie的方式,另一种是session的方式。下面就来看看每一种方式都是如何做的。

   1.cookie方式:

   cookie是浏览器访问服务器的时候,服务器将一些数据以set-cookie形式的消息头发送给浏览器,浏览器会将这些数据保存起来,当下次浏览器访问服务器的时候,会将这些数据以cookie消息头的形式发送给服务器,cookie就是使用这种方式来管理用户状态的。

   Java创建一个cookie

   Cookie cookie = new Cookie(String name,String value);

   response.addCookie(cookie);

   查询一个cookie:

   Cookie[] cookies = request.getCookies();遍历这个数组,使用下面的方法获取 name和value.如果没有cookie就会返回null.

   String name = cookie.getName();

   String value = cookie.getValue();

   编码问题:

   cookie的值只能是ascii编码,如果是中文,需要讲中文转换成ascii字符串。可以使用URLEncode.encode()和URLDecode.decode()方式进行转码和解码。

   cookie保存时间:

   Java中使用cookie.setMaxAge(int seconds);设置cookie的保存时间

   seconds > 0:浏览器会将cookie以文件的形式保存在硬盘上,在超过指点时间后,才会删除文件。

   seconds < 0:浏览器会将cookie保存在内存里,当浏览器关闭后,删除。

   seconds = 0:立刻删除这个cookie。

   所以要删除一个cookie也很容易,譬如删除name为id的cookie只需要这么做就以了

   Cookie cookie = new Cookie("id","");

   cookie.setMaxAge(0);

   response.addCookie(cookie);

   cookie的路径问题:

   浏览器向服务器发送某个地址请求时,会先进行比较cookie的路径,只有cookie的路径与访问的路径匹配才会发送cookie,cookie的路径可以使用cookie.setPath(String path)的方式来设置。

   如果没有设置会,就会有一个缺省路径,缺省路径是生成cookie的组件的路径,譬如:/appname/addCookie保存了一个cookie,则cookie的路径是/appname/addCookie.

   一般可以设置setPath(/appname),就表示该应用下所有的地址都会发送cookie。

   cookie的限制:

   cookie可以被用户禁止

   cookie的大小有限制,一般4K左右

   cookie的数量也是有限的

   cookie的值只能是字符串

   cookie不安全

             2.session方式:

   浏览器访问服务器时,服务器会创建一个 session 对象(该对象有一个唯一的 id, 一般称为 sessionId)。服务器在缺省情况下,会将 sessionId 以 cookie 机制发送给浏览器。当浏览器再次访问服务器时,会将 sessionId 发送给服务器。服务器依据 sessionId 就可以找到对应的 session 对象。通过这种方式,就可以管理用户的状态。

   如何获得 session 对象

   HttpSession session = request.getSession(boolean flag);
   当 flag = true:服务器会先查看请求中是否包含 sessionId,如果没有,则创建一个 session 对象。如果有,则  依据 sessionId 去查找对应的 session 对象,如果找到,则返回,如果找不到,则创建一个新的 session 对象。

   flag = false:服务器会先查看请求中是否包含 sessionId,如果没有,返回 null。如果有,则依据 sessionId 去查找对应的 session 对象,如果找到,则返回。如果找不到,返回 null。

   HttpSession session = request.getSession(); 和request.getSession(true)等价。

   HttpSession 接口提供的一些方法

   获得 sessionId

   String session.getId();

   绑订数据

   session.setAttribute(String name,Object obj);

   Object session.getAttribute(String name);

   如果 name 对应的值丌存在,返回 null。

   session.removeAttribute(String name);

   session 超时

   服务器会将超过指定时间的 session 对象删除(在指定的时间内,该 session 对象没有使用)。

   方式一:

   session.setMaxInactiveInterval(int seconds);
   方式二:

   服务器有一个缺省的超时限制,可以通过相应的配置文件来重新设置。比如可以修改 tomcat的  web.xml(tomcat_home/conf 下面)。

 <session-config>

 <session-timeout>30</session-timeout>

 </session-config>

   另外,也可以叧修改某个应用的 web.xml。

   删除 session

   session.invalidate();

    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  session cookie