zoukankan      html  css  js  c++  java
  • JavaWeb Session 状态管理

    引言

    HTTP 协议是一个无状态的协议,简单理解就是两次请求/响应无法记录或保存状态信息。但是动态 Web 项目开发是需要保存请求状态的,比如用户的登录状态,但 HTTP 协议层不支持状态保存,所以需要有状态管理解决方案来解决这个问题。

    常见的状态管理解决方案如下:

    • 隐藏表单字段
      提交表单时,利用表单控件的 hide 属性(隐藏属性)可以将状态信息隐藏发送给服务器,但是缺点是需要有表单提交。

    • cookie
      客户端 cookie 保存状态信息,缺点是状态信息存放在客户端不够安全

    • session
      服务器 session 保存状态信息,cookie 存放 session id,比较安全。缺点是如果浏览器禁用 cookie 会导致 session 无法使用。

    • url 地址重写
      重写 url 地址,将 session id 作为参数存放在 url 地址后,而不是 cookie 里,以解决 cookie 禁用 session 无法使用问题。

    session 状态管理原理

    • 当客户端第一次向服务器发送 HTTP 请求时,服务器收到请求后创建一个 session 对象并生成唯一的 session id;

    • 服务器响应时将该 session id 发送给客户端浏览器,浏览器会将 session id 存放于 cookie 中;

    • 当客户端第二次再向服务器发送 HTTP 请求时,这时浏览器会将 cookie 里存放的 session id 一并发送给服务器;

    • 服务器收到请求后,会取出 session id,然后从服务器管理 session 对象的 map 集合里查找 session 对象;这样两次请求/响应共享同一个 session 对象,也就是所谓的一次 session 会话

    session 对象的方法

    通过 setAttribute(String name, Object object)方法可以向 session 对象存放状态信息,getAttribute(String name) 方法可以取出状态信息。

    作者:Binge
    本文版权归作者和博客园共有,转载必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    Android Push Notification实现信息推送使用
    java动态编译
    Directx11教程(56) 建立一个skydome
    Directx11教程(51) 简单的billboard
    Directx11教程(52) 实例(instancing)的简单应用
    Directx11教程(50) 输出depth/stencil buffer的内容
    Directx11教程(54) 简单的基于GS的billboard实现
    Directx11教程(57) 环境映射
    Directx11教程(59) tessellation学习(1)
    Directx11教程(20) 一个简单的水面
  • 原文地址:https://www.cnblogs.com/binbingg/p/13822646.html
Copyright © 2011-2022 走看看