一、问题引入
1、浏览器关闭,会话结束,但为什么有些论坛在用户再次进入的时候却可以识别用户身份,并且用户状态为:已登录?比如知乎、b站?
2、用户每次访问邮箱的时候,页面上会自动显示该用户名?比如课工场?
二、cookie简介
跟踪用户的整个会话。
cookie通过在客户端记录信息来确定用户名等等。
给客户端发送一个通行证,每一个客户一个。
cookie本质是文本信息。
cookie以文件方式保存数据:
- 添加数据:
public void addCookie(Cookie cookie)
- 获取数据:
public Cookie[] getCookies()
- 设置有效期:
public void setMaxAge(int expiry)
三、示例
需求:登陆之后,跳转到新闻页面,在新闻页面的登录框显示登陆名。
在处理用户注册信息的jsp页面中,当成功登陆的时候,使用cookie记录用户的登录名:
注:
1、Cookie声明之后要设置路径:cookie.setPath("/")
,这段代码的意思是我整个项目都可以来访问这个cookie;如果不加,则只有我当前所在路径(和我同一级)和子目录(父目录的所有子目录)可见。
2、可以同时设置有效期,单位是秒:cookie.setMaxAge(60*60)
,如果不写这句话,浏览器关了,cookie就失效了。
在新闻界面,拿出cookie里面的uesrname的值。
注:
1、在去拿cookie的时候,不是直接去拿某一个。而是要获取cookie的数组,然后进行遍历查找。原因是,除了我自己设置的cookie之外,还有别的cookie。比如当浏览器访问服务器的时候,会默认发回来一个cookie,这个cookie不是人为创建,而是系统帮我创建,该cookie的名字叫做Jsessionid,其值为sessionid。所以session是基于cookie的。
2、禁用cookie:可以在浏览器的高级设置里面设置组织第三方的cookie。这时候cookie就不能使用了。
3、cookie里面的东西最好不要放中文,否则会报错。但是如要一定要用中文,需要重新设置编码格式并且在拿的时候需要解码: