session和cookie的理解:


客户端浏览器A向服务端发出请求,服务端接收到浏览器A的请求,在服务端生成一个sessionID专门标记这个A,然后响应A的请求的页面时并把这个sessionID传回给浏览器A,而浏览器A是以cookie的形式存放这个sessionID,因此,客户端的说法就不叫session而是叫cookie,服务端才叫session(cookie是客户端行为,session是服务端行为),cookie的生命周期,只要浏览器窗口关闭,cookie就消失(这个cookie是存在浏览器窗口的内存中,如果想让这个cookie存在本地,就得设置cookie的生命周期setMaxAge),而与这个A对应的在服务端的标记session它默认存储时间是30分钟(可以通过修改web.xml的session-config)


为什么需要生成标记,客户端(cookie)和服务端(session)行为?

因为http是无状态连接的,当客户端浏览器A一个请求到达服务器,服务端响应了这个请求(返回了数据给这个浏览器A),然后客户端A和服务端之间的连接就断开了,那么,如果A在本页通过超链接跳转到另一个页面(即向服务器发送了另一个请求),服务器怎么知道是谁(哪个浏览器)向它发送了请求呢?举个例子,淘宝,你打开了一个浏览器窗口访问了淘宝里面的页面(很多商品),你挑选了3个商品,准备付款,点击提交订单按钮出现"付款页面",那么"付款页面"是不是应该记录你刚才选的3个商品信息,那么从点击"提交订单"按钮到出现"付款页面"这个过程就需要用到标记。流程是这么走的:当A第一次请求发送到服务端,服务端生成session,然后发送对应A响应请求的页面并携带标记(session)给A,A出现商品页面并在自己的窗口(内存)中将session以cookie的形式保存(A断开与服务端的连接),所以客户端叫cookie,服务端才叫session,A浏览器点击"提交订单"按钮了(第二次发送请求给服务端),将刚才保存的cookie发送给服务端(以便让服务端知道你是哪个浏览器发过来的,服务端拿到了cookie就会去对比刚才存储的session,一对比是一样的,哦,原来是刚才那个A发过来的),然后服务端就返回了第二个页面(付款页面)



补充:

cookie是如果服务器需要记录该用户的状态(比如记录一些信息键值对方式),就要使用response向客户端颁发一个cookie,意思就是你要用cookie"存东西" 就得自己手动new一个cookie,然后再response.addCookie(cookieName)连同响应它回去反馈给客户端,

而session是当客户端第一次请求时生成的,它是服务器端的状态记录(能存数据),同时生成一个标记(sessionId)  专门标记此客户端,在响应的同时(返还此请求的页面信息)response会将sessionId顺便传给客户端,而客户端时以cookie的形式保存着.下一次如果客户端再一次访问服务器会将(cookie)sessionId带上,为了给服务器验证是否是上一次访问的那个客户端

可以通过request.getCookies获取cookie,如果自己没有new新的cookie来存东西,那么第二次(因为第一次访问还没有,才刚生成)访问的话,拿到的是sessionId也就是客户端叫cookie的JSSESSIONID.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值