Session与Cookie(自定义 Session)
Request — 只能在转发有效
context — 上下文 保存在服务器端上
Cookie:服务器和客户端资源保存—保存在客户端
Session:是保存在服务器上,存放在内存里面,客户端与服务端之间的通讯使用SessionId
场景在哪里?登陆,购物车, 移动App接口会话管理
Cookie默认浏览器关闭就失效,不同浏览器不通用
可以用Cookie.setMaxAge()负数为默认关闭失效,整数时以秒为单位
Cookie不安全不建议使用Cookie信息
Cookie的局限性:
- Cookie只能存字符串类型,不能存对象
- 只能存非中文
- 1个Cookie的容量不超过4KB,如果想保存非字符串,超过4KB的内容,只能使用session
Session底层实现原理
**原理:**服务器创建了一个Session之后(session的值是存放在服务器端上)会在响应里面将sessionId返回给客户端,客户端将SessionId保存在本地硬盘,在此请求的时候,将sessionId通过请求头的方式传给服务器端
HttpServletRequest 对象中,有getSession()可以传boolean参数,默认true表示如果没有找到session就会创建一个session,如果是false,如果没有找到了session,也不创建
关闭浏览只是SessionId被清除,Session没有消失
自定义Session
首先Session用Map集合去装数据,唯一不重复的字符串作为key,简称SessionId
清楚Session无非就是将Map集合数据清除掉
token其实就是一个令牌,具有随机性,有效期,不能重复,类似月sessionid
UUID(Universally Unique Identifier) 通用唯一识别码,让所有元素都有唯一的辨识资讯
表单重复提交
通过前端解决
form 中onsubmit加个script写的函数,用个flag控制
或者将提交按钮设置为不可用
通过后端解决
使用token+session
在from.jsp隐藏域存入一个token
然后和session的对比下就ok