Session和Cookie

44 篇文章 7 订阅
28 篇文章 2 订阅

目录

1、什么是cookie?

2、Cookie的作⽤

3、Cookie的设置和获取

4、Cookie的有效时间

5、什么是Session?

6、创建Session的格式

7、Session的⽣命周期

8、Sesssion的应⽤场景

9、Session和Cookie的区别


1、什么是cookie?

Cookie 是客户端 ( ⼀般指浏览器 ) 请求服务器后 , 服务器发给客户端的⼀个辨认标识,保存在客户端,当客户端再次向服务器发送请求时,会携带着这个辨认标识,服务器就可以通过这个标识来识别客户端的身份或, 状态等。
Cookie 的作⽤:跟踪会话,记录⼀次会话中 ( Session ,⼀次会话可能会有多次请求,当然也可以有多个 Cookie 来跟踪不同的信息 ) 的信息,这样服务器就会知道⽤户的状态,⽐如有没有登录成功,付款时购 物⻋中的东⻄等,就相当于贴在客户端脑⻔上的纸条,浏览器看不到,但服务器看得到。

2、Cookie的作⽤

1 保持⽤户登录状态
将⽤户的信息保存到 Cookie 中,并发送给浏览器,并且将有效时间设置为⼀个较⻓的时间,这样浏览器在以后访问⽹站时,都会带着该 Cookie ,服务器以此来辨识⽤户,⽤户就不再需要输⼊⽤户名和密码等 信息。
2 记录⽤户名
⼀旦⽤户登录成功以后,下次再登录时,直接将 Cookie 中的⽤户名读取并显示出来,这样⽤户就不需要再次输⼊⽤户名,只输⼊密码即可。

3、Cookie的设置和获取

通过 HttpServletResponse.addCookie 的⽅式设置 Cookie
注意 :new Cookie() 时两个参数都是字符串
浏览器中查看 cookie 的内容
服务端获取客户端携带的 cookie :通过 HttpServletRequest 获取
删除 Cookie
Cookie cookie = new Cookie("jieguo","true");
response.addCookie(cookie);
//1.创建⼀个name为username的Cookie
Cookie cookie = new Cookie("username", "aaa");
//2.设置Cookie的有效时间为0
cookie.setMaxAge(0);//删除cookie的关键
//3.将cookie发送给浏览器,来替换同名Cookie
response.addCookie(cookie);

4、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);

5、什么是Session

Session 是另⼀种记录客户状态的机制,不同的是 Cookie 保存在客户端浏览器中,⽽ Session 保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是 Session
客户端浏览器再次访问时只需要从该 Session 中查找该客户的状态就可以了。 如果说 Cookie 机制是通过检查客户身上的 通⾏证 来确定客户身份的话,那么 Session 机制就是通过检查
服务器上的 客户明细表 来确认客户身份。 Session 相当于程序在服务器上建⽴的⼀份客户档案,客户来访的时候只需要查询客户档案表就可以了。

6、创建Session的格式

Session 对应的类为 javax.servlet.http.HttpSession 类。每个来访者对应⼀个 Session 对象,所有该客户的状态信息都保存在这个 Session 对象⾥。
Session 对象是在客户端第⼀次请求服务器的时候创建
Session 也是⼀种 key-value 的属性对,通过 getAttribute(Stringkey) setAttribute(String key
Objectvalue) ⽅法读写客户状态信息。 Servlet ⾥通过 request.getSession() ⽅法获取该客户的 Session
HttpSession session = request.getSession(); // 获取Session对象
session.setAttribute("loginTime", new Date()); // 设置Session中的属性
out.println("登录时间为:" +(Date)session.getAttribute("loginTime")); // 获取Session属性

7、Session的⽣命周期

Session 保存在服务器端。 为了获得更⾼的存取速度,服务器⼀般把 Session 放在内存⾥。每个⽤户都会有⼀个独⽴的 Session 。如果 Session 内容过于复杂,当⼤量客户访问服务器时可能会导致内存溢出。因 此, Session ⾥的信息应该尽量精简。
Session 在⽤户第⼀次访问服务器的时候⾃动创建。需要注意只有访问 JSP Servlet 等程序时才会创建Session ,只访问 HTML IMAGE 等静态资源并不会创建 Session 。如果尚未⽣成 Session ,也可以使 request.getSession(true) 强制⽣成 Session
Session ⽣成后,只要⽤户继续访问,服务器就会更新 Session 的最后访问时间,并维护该 Session 。⽤户每访问服务器⼀次,⽆论是否读写 Session ,服务器都认为该⽤户的 Session“ 活跃( active 了⼀次。
由于会有越来越多的⽤户访问服务器,因此 Session 也会越来越多。 为防⽌内存溢出,服务器会把⻓时间内没有活跃的 Session 从内存删除。这个时间就是 Session 的超时时间。如果超过了超时时间没访问过服 务器, Session 就⾃动失效了。
Session 的超时时间为 maxInactiveInterval 属性,可以通过对应的 getMaxInactiveInterval() 获取,通过setMaxInactiveInterval(longinterval) 修改。 Session 的超时时间也可以在 web.xml 中修改。另外,通过调⽤ Session invalidate() ⽅法可以使 Session 失效。
<session-config> 
 <session-timeout>30</session-timeout>
</session-config>

8、Sesssion的应⽤场景

1. 登录
2. 退出 ( 创建 Session 和消除 Session)

9、SessionCookie的区别

(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
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

初尘屿风

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值