最近在做系统的迁移,完成后发现出现了Error401,是认证没通过,借着此机会复习一下cookie和session的机制。
基础概念
Cookie
概述
在客户端保存。
web应用使用http进行传输,但是HTTP是无状态协议,为了追踪用户的行为,可以引入cookie。
cookie是一小段文本,当客户端请求服务器时,浏览器将网址与cookie一起提交给服务器,服务器根据cookie判断用户状态。服务器可以修改cookie内容,当服务器需要获取cookie,可以向客户端发送response请求来获取。
通过document.cookie可以获得cookie,为了快速查看,可以通过js在页面显示,javascript:alert(document.cookie)。
cookie的使用
在java中,cookie的类为javax.servlet.http.cookie,存贮方式为key-value,通过覆盖进行修改 。
request.getCookie()
response.addCookie()
不同网站会向客户端办法不同cookie,cookie的管理由浏览器进行管理,不可跨域。
cookie的常用属性
domain:不同domain下的cookie不能相互调用
path:决定域名下的特定路径访问cookie
maxAge:有效期,单位为秒
secure:true⇒ https, ssl; false ⇒ http
Session
概述
在服务器保存。
客户端浏览器访问网站时,从该session查找客户状态。
如果session内容复杂,服务器的客户比较多,会发生内存溢出。
session在用户第一次访问时创建,往后只要发生访问行为,session会自动更新。
request.getSession(true)会强制生成session。
存储方式为key-value类型。
session.getAttribute(String key)
session.setAttribute(String key, Object value)
servlet中
request.getSession()
session与浏览器
session对客户端透明。它需要cookie作为识别标识。
由于http无状态,服务器向客户端发送名为jsession的cookie,它的值为session的id,session根据此id判断是否同一用户。
URL地址重写
当客户端不支持cookie时,地址重写的原理是将用户session的id写到url地址中,服务器解析重写后的url来获取session的id,从而记录用户状态。
问题解决
由于这次出现的错误是401,认证失败,根据错误stacktrace,进行查找,发现系统是使用session的URL地址重写方式进行认证。
如果系统需要做一套用户登录的控制(这里的用户指后台开发人员),可以根据session来管理用户。
用户登录时,将session的id加载到URL中,将请求发送给服务器。通过查看对应登录URL在api-gate的信息,申请权限即可。
利益相关,代码就不贴了。