Web 会话机制(cookie+session)与实例

最近在做系统的迁移,完成后发现出现了Error401,是认证没通过,借着此机会复习一下cookie和session的机制。

  • 基础概念
    • Cookie
      • 概述
      • cookie的使用
      • cookie的常用属性
    • Session
      • 概述
      • session与浏览器
      • URL地址重写
  • 问题解决

基础概念

概述

在客户端保存。

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的信息,申请权限即可。

利益相关,代码就不贴了。

你可能感兴趣的:(Web,session,cookie)