Javaweb第六节会话状态管理(session、cookie)

Cookie(采用的是在客户端保持HTTP状态信息的方案)

第一次浏览器发请求给服务器,服务器创一个cookie 保存在响应头的set-cookie中响应给浏览器,浏览器收到后会把cookie保存在缓存中,每当浏览器再次发送请求的时候,会把cookie从缓存中取出一并发送给服务器。

Cookie包含名称和值,一个服务器可以给一个浏览器发送多个cookie,一个浏览器可以存储多个服务器提供的cookie。

因为保存在浏览器,所以相对于session来说不是太安全(而且cookie不支持中文)。
Cookie类的方法
构造方法 : public Cookie(String name,String value)
getName方法:获取cookie名
setValue与getValue方法:设置、获取cookie的value
setMaxAge与getMaxAge方法:cookie默认是会话级别的cookie,用户退出浏览器就会被删除,可以用setMaxAge设置过期时间
cookie. setMaxAge();以秒为单位
默认是-1.保存在浏览器的缓存,0是删除这个cookie,同时删除缓存和文件

Session(采用的是在服务器端保持HTTP状态信息的方案)

服务器有着N个session,浏览器关闭后服务器端的session不会立马删除,只是失去关联,而是等30分钟后清除(很占内存资源,一个项目里面不要过多地使用session);可以在web.xml文件中设置超时时间

<session-config>
<session-timeout>30<.session-timeout>
</session-config>

第一次浏览器发请求给服务器,服务器创一个session 并生成一个序列号(jsessionid)保存在响应头的set-cookie中响应给浏览器,每当浏览器再次发送请求的时候,会把jsessionid从缓存中取出一并发送给服务器,服务器根据相应的jsessionid去匹配相应的session,确定属于哪一个会话

创建session:HttpServletRequest.getSession()
这个方法自动加了个判断,如果有已经创建了session,那么他会返回这个session,否则新创建一个session

通过session防止表单重复提交
什么时候会出现重复提交
1、在响应页面没有完成响应时,重复点击提交按钮
2、点击浏览器后退按钮后,再次提交
3、在表单请求一个servlet,而在servlet里面请求转发到了一个jsp页面,当刷新浏览器的时候,因为地址栏还是servlet的地址栏。
(重定向不会出现重复提交)
如何避免?
随机生成令牌 有时会kkas-wqerw-sss,,,可以用replace方法把 - 替换成空
String uuid = UUID.randomUUID().toString.replace(”-”,””);
将这个令牌保存在session:session.setAttribute();
在提交的表单里设置一个令牌(要么设置在隐藏域里面;要么设置成只读)
定义一个隐藏域<input type=”hidden” value=”<%=uuid%>” name=”token”>
分别获取两个令牌,第一次注册两个令牌必定相同,输出注册成功,然后删除session域中的uuid,再注册就会不相同,提示重复提交。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值