首页 > 代码库 > session&&cookie

session&&cookie

    先吐槽一下,春节回到家里真是秃废啊!应该有和我一样的小伙伴吧O(∩_∩)O    

   好的,步入正题。今天来聊聊jsp中的二个常用类(对象),之前使用session和cookie挺多的,可是细节有些真没有注意。今天较为详细的来聊聊。

  session

   1 有关session

   session是jsp的一个内置对象,与服务器自动创建。那么他是什么时候产生的呢?

   我们向服务器发送请求时,服务器端就会自动创建session(Httpsession实例),并且将session的ID返回给客户端(保存在JSESSIONID变量中),session对象实例保存在服务器端,因此session经常被称为是服务器端的数据共享对象

   2 session常用方法(函数)

    (1)我们可以向session中添加变量和变量值

    addAttribute(String name,Object values);返回值是Object类型

    (2)获取session的ID值

    String getId();返回值是String类型

    (3)设置session的时间周期(默认是30min)

     setMaxInactiveInterval(time);时间以秒计算 
   (4)其他,removeAttribute(String name)等等
 

  3 session的特点

     我们可以在不同的页面中共享session中的数据,要知道数据共享使用频率很高!

     值得注意的是:session在不同的浏览器中数据不可共享;

  4 session中数据的生命周期

     这是我们最关心的问题,以下四种情况session会失效(清空)

     (1)退出浏览器(很常见)

     (2)关闭服务器(session资源被释放)

     (3)session的有效时间到

     (4)手动杀死(很少)

    可以做实验去验证,包括下面的结论

 

 cookie

   1 关于cookie

    cookie(小甜饼)不是jsp的内置对象,程序员自己添加的cookie保存在电脑对应的文件(物理文件),通常说是客户端数据共享

   2cookie中的常见函数

   //创建cookie
   Cookie c=new Cookie("what","javaweb");
   //设置cookie时间周期
   c.setMaxAge(10*60);
   //保存在客户端
   response.addCookie(c);

   //获取cookie

   Cookie[] cookies=request.getCookies();

   3 cookie的特点

    cookie的用处很大,比如(1)我们可以记住用户名和密码,在一定周期内不需要重新登录,这种方式非常常见 (2)浏览器端的个性化,比如背景图,音乐等等 (3)其他

    cookie也不可以跨浏览器使用的,cookie会保存在电脑的硬盘上。

   4一个特殊的cookie

    我们之前讲到session的ID是保存在JSESSIONID中的,其实是这样的,Cookie(JSESSIONID,sessionid);以cookie的形式保存在客户端的。不过这个cookie不保存在电脑硬盘上,而是保存在浏览器中(内置cookie)。这个cookie随着浏览器的关闭而关闭,这就是为什么关闭浏览器session数据会清空(sessionId消失,找不到对应的session实例)

   5 较复杂的生命周期

    cookie是生命周期相对复杂,这话怎么说。在默认情况下,cookie是随着浏览器的关闭而关闭的(不保存文件)。也就是我们关闭浏览器之后cookie生命周期也就结束了。那么我们需要这种效果怎么办?很简单,我们设置时间周期即可,使用setMaxAge(time),以秒计算。这时你关闭IE浏览器,再打开IE浏览器,cookie不会消失(从文件中读取),内置的会消失(session失效) ,当时间周期到了cookie自然也会失效。

       一个问题:

      假如用户禁止使用cookie了,session怎么办?

      cookie不能使用的话,session可以用吗?自然是不能的(不处理情况下)。原因不用说了吧,session的Id不能保存自然就用不了(要知道浏览器是通过sessionId来实现浏览器和session 一一对应的)。正常情况下,我们向服务器发送的url中后面是默认加上ISESSIONID=id的,禁止使用cookie之后是没有的。我们可以手动加上,可是我们知道id值吗?应该不知道 ,我们怎么办? jsp中为我们提供了二个处理函数,其中一个是encodeUrl(String url);浏览器自动在url后面加上JSESSIONID。

      经典代码:String url=response.encodeUrl("xx.jsp"); response.sendRedirect(url);

   

  

 

 

 

 

    

 

 

    

session&&cookie