Session和Cookie

Session

request存的值只能在单次请求中保存,保存的数据不能跨⻚⾯,当重定向时,request存的值会丢失.

session的数据可以在多个⻚⾯中共享,即使重定向⻚⾯,数据不会丢失

session中可以包含n个request。

会话的概念:从打开浏览器到关闭浏览器,期间访问服务器就称为⼀次会话
常⽤⽅法:

  • void setAttribute(String key,Object value) 以key/value的形式保存对象值,将数据存储在服务器端

  • Object getAttribute(String key) 通过key获取对象值

  • void invalidate() 设置session对象失效

  • String getId() 获取sessionid,当第⼀次登录成功后,session会产⽣⼀个唯⼀的id,浏览器之后访问时如果发现id值还是之前id,那么说明 当前访问的属于同⼀个会话

  • void setMaxInactiveInterval(int interval) 设定session的⾮活动时间

适用场景

一般我们判定用户是否为登录状态时,就是利用session里面是否又对应存值来判断。代码如下:

 if (user.getUsername().equals(username)&&user.getPassword().equals(password)){
            HttpSession session = req.getSession();
            session.setAttribute("username",user.getUsername());
//            session.setMaxInactiveInterval(30);//单位秒,session失效时间
            resp.sendRedirect("/success.jsp");
        }

把我们登录成功的用户信息存在session域便于我们后续的使用,例如可以加过滤器判断用户是否为登录,如果未登录就引导用户登录后,才能访问对应页面。
例如:我们登录成功之后的success.jsp页面只有登录成功之后才能访问,如果未登录,会在登陆页面进行相应的提示
在这里插入图片描述
关键代码如下:

 Object username = res.getSession().getAttribute("username");
 if(url.endsWith("success.jsp")&&username == null){
            res.setAttribute("msg","请先登录");
            res.getRequestDispatcher("/index.jsp").forward(res,resp);
        }

我们要在session域中找到我们登录成功后存入的username值,如果找不到就会重新跳转到我们登录页。

Cookie

Cookie是客户端(⼀般指浏览器)请求服务器后,服务器发给客户端的⼀个辨认标识,保存在客户端,当客户端再次向服务器发送请求时,会携带着这个辨认标识,服务器就可以通过这个标识来识别客户端的身份或
状态等。

Cookie的作⽤:跟踪会话,记录⼀次会话中(即Session,⼀次会话可能会有多次请求,当然也可以有多个Cookie来跟踪不同的信息)的信息,这样服务器就会知道⽤户的状态,⽐如有没有登录成功,付款时购物⻋中的东⻄等,就相当于贴在客户端脑⻔上的纸条,浏览器看不到,但服务器看得到。

Cookie的应用

保持用户登录状态

将⽤户的信息保存到Cookie中,并发送给浏览器,并且将有效时间设置为⼀个较⻓的时间,这样浏览器在以后访问⽹站时,都会带着该Cookie,服务器以此来辨识⽤户,⽤户就不再需要输⼊⽤户名和密码等信息。

记录⽤户名

⼀旦⽤户登录成功以后,下次再登录时,直接将Cookie中的⽤户名读取并显示出来,这样⽤户就不需要再次输⼊⽤户名,只输⼊密码即可。

Cookie的设置和获取

通过HttpServletResponse.addCookie的⽅式设置Cookie

注意:new Cookie()时两个参数都是字符串

Cookie cookie = new Cookie("jieguo","false");
 response.addCookie(cookie);

浏览器中查看cookie的内容

在这里插入图片描述

服务端获取客户端携带的cookie:通过HttpServletRequest获取

<% 
 Cookie[] cookies = request.getCookies();
 if(cookies != null)
 for(Cookie c : cookies){
 String name = c.getName();//获取Cookie名称
 if("jieguo".equals(name)){
 String value = c.getValue();//获取Cookie的值
 bool = Boolean.valueOf(value);//将值转为Boolean类型
 }
 }
%>

删除Cookie

通过设置同名Cookie的最⼤存活时间为0,删除Cookie是指使浏览器不再保存Cookie,使Cookie⽴即失效
举例:使name为username的Cookie⽴即失效

//1.创建⼀个name为username的Cookie
Cookie cookie = new Cookie("username", "aaa");
//2.设置Cookie的有效时间为0
cookie.setMaxAge(0);//删除cookie的关键
//3.将cookie发送给浏览器,来替换同名Cookie
response.addCookie(cookie);

Cookie的有效时间

Cookie发送给浏览器以后,浏览器并不会永久保存,也就是到了⼀定的时间以后浏览器会⾃动销毁Cookie。Cookie的默认有效时间为⼀次会话(⼀次打开关闭浏览器的过程),我们也可以⼿动指定Cookie的有效时间

//setMaxAge⽤来设置Cookie的最⼤有效时间,需要int型的参数,代表有效的秒数
 cookie.setMaxAge(秒数)//当参数⼤于0时,会设置为指定的秒数
 cookie.setMaxAge(30);
 //当参数等于0时,浏览器不会保存Cookie,Cookie⽴即失效
 cookie.setMaxAge(0);
 //当参数⼩于0时,和不设置是⼀样,当前会话有效
 cookie.setMaxAge(-100);
 //设置⼀个永久有效的Cookie,并⾮永久,只是使Cookie的⽣命很⻓⽽已
 cookie.setMaxAge(60*60*24*365*10);

Session和Cookie的区别

(1) Cookie数据保存在客户端,Session数据保存在服务器端。

(2) Session是由应⽤服务器维持的⼀个服务器端的存储空间,⽤户在连接服务器时,会由服务器⽣成⼀个唯⼀的SessionID,

⽤该SessionID 为标识符来存取服务器端的Session存储空间。⽽SessionID这⼀数据则是保存到客户端,⽤Cookie保存的,

⽤户提交⻚⾯时,会将这⼀SessionID提交到服务器端,来存取Session数据。这⼀过程,是不⽤开发⼈员⼲预的。所以⼀旦客户端禁⽤Cookie,那么Session也会失效。

(3) Cookies是属于Session对象的⼀种。但有不同,Cookies不会占服务器资源,是存在客服端内存或者⼀个Cookie的⽂本⽂

件中;⽽Session则会占⽤服务器资源。所以,尽量不要使⽤Session,⽽使⽤Cookies。但是我们⼀般认为Cookie是不可靠

的,Cookies是保存在本机上的,但是其信息的完全可⻅性且易于本地编辑性,往往可以引起很多的安全问题Session是可靠地。但是⽬前很多著名的站点也都⽤Cookie。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值