【笔记整理】?? 2.7 Session | Cookie

发布于:2021-07-20 07:37:10



目录
一、网址重写二、隐藏域三、Session & CookieSession 操作Cookie操作:








http 协议 是 无状态协议,请求一次用一次,下一次又是全新的链接。用户用Http登录后,服务器无法凭借Http来判断新请求用户是否是已登录用户。因此要对Http用户进行会话管理(Session)。一般用于保持状态的方法有4种:URL重写,隐藏域,cookie和session。


一、网址重写

网址重写是将token值放入到URL中,这样,每次用户用带着token的URL请求时,服务器便能根据token的值来判断是哪个具体的用户法来的请求。
网址重写的缺点:
1、某些浏览器中,URL限制为2000个字符。
2、要把token放入到静态页面中,十分不易。
3、所有的链接都必须带有token。如果一个页面中有许多链接,则每个链接都需要改写。
4、特殊字符无法直接显示在URL中。一般来说需要转码。
5、URL中的信息是明显可见的,不利于服务器端安全。


二、隐藏域

利用隐藏域来保持状态,这与网址重写技术类似,但是将值隐藏到填写到表单的隐藏域中。当用户提交表单时,隐藏域中的内容被一起提交。
使用隐藏域的优缺点:
1、只有页面包含表单时,才适合用隐藏域。
2、当传递信息不需要跨越多页时,才适合使用这种技术。


三、Session & Cookie

是什么?
Session:是服务器端的一块内存区域,每个session都有一个唯一的编号 ?? session ID
Cookie:是浏览器端的一块内存区域,数据按照域名存储。


工作机制
当客户端请求服务器端时,服务器端会检查Cookie是否存在 Session ID。
- 如果没有,就创建session,并且把sessionid返回客户端,存储到Cookie中。
- 如果有,就能够找到对应的session。


Session 操作

?getSession()?如果能够从cookie中读取到sessionId,则返回这个SessionId对应的session对象,如果没有读取到sessionId或者通过sessionID找不到对应的session对象,就会新创建一个空的session对象。


?getSession(Boolean param)?如果param为false,则在没有SessionID或者通过SessionID找不到Session对象的时候,返回null。如果param是true,就等同于getSession()


Session 是有时间限制的。默认30分钟。可以通过以下三种方式修改时间:
1、 修改tomcat配置文件:web.xml
2、 在项目描述部署符web.xml中添加配置:



20


3、 在应用程序中,通过调用session. setMaxInactiveInterval()方法。


Cookie操作:

1、 添加cookie
Java中,使用javax.servlet.http.Cookie类来对Cookie进行操作。


Cookie cookie = new Cookie(cookieName, cookieValue);

创建Cookie之后,可以设置它的domain、path、maxAge。其中maxAge决定了cookie的有效期。
为了将Cookie写到客户端,需要执行response.addCookie(Cookie cookie)方法。


resp.addCookie(cookie);

2、 读取cookie
要访问浏览器带来的 cookie 信息,需要调用 request 的getCookie方法。该方法返回一个Cookie 数组,如果请求中没有 Cookie,则返回 null。


Cookie[] cookies = req.getCookies();
for(Cookie cookie : cookies) {
if(cookie.getName().equals("username")) {
return cookie;
}
}

3、 删除cookie
Java中并没有提供删除cookie的方法,因此一般采用如下方式来删除一个cookie。
新建同名cookie,将setMaxAge()设置为0


Cookie cookie = new Cookie("username","");
cookie.setMaxAge(0);
resp.addCookie(cookie);

4、 修改
新建同名cookie
注意:cookie的存储容量很小,一般几K。注意,存储cookie的时候,为了安全起见,最好能给cookie加密。(当前时间或md5)

相关推荐

最新更新

猜你喜欢