zoukankan      html  css  js  c++  java
  • session和cookie

    一:Session

    1.Session作用于服务器端,在客户端第一次请求服务器并调用request.getSession()时候创建,存放于内存,每个用户都有一个Session。(需要注意只有访问JSP、Servlet等程序时才会创建Session,只访问HTML、IMAGE等静态资源并不会创建Session。如果尚未生成Session,也可以使用request.getSession(true)强制生成Session)

    2.Session生成后,用户每访问服务器一次,无论是否读写Session,服务器都认为该用户的Session“活跃(active)”了一次。为防止内存溢出,服务器会把长时间内没有活跃即超时的Session从内存删除。

    3.Session的尽量只存放一些重要的数据,减小内存占用,防止并发访问内存溢出。

    4.Session统计同时在线人数,通过创建实现HttpSessionListener接口的监听器,每次创建Session次数+1,每次销毁-1;

    5.服务器会为每个Session创建一个唯一的ID,这个SessionId在客户端与服务端会话是十分重要;

    二:Cookie

    1.Cookie属于浏览器管理,具有不可跨域名性。由于HTTP协议是无状态且是不安全的,所以Cookie的值常加密后保存。

    2.一个用户的所有请求操作都应该属于同一个会话,不同的用户拥有不同的会话,而http请求是无状态的,那服务器怎么将这么多请求划分到具体用户的会话中呢?服务器在创建Session后会生成session的id并发送给客户端,客户端即浏览器会将这个id保存在cookie 容器中,根据保存的id可将无状态的请求归到同一个会话中。

    3.Cookie的基本用法:

    Cookie cookie = new Cookie("username","helloweenvsfei");   // 新建Cookie
    cookie.setMaxAge(Integer.MAX_VALUE);           // 设置生命周期为MAX_VALUE
    cookie.setPath("/keepft/");                              // 设置路径
    cookie.setDomain(".keepft.com");          // 设置域名
    response.addCookie(cookie);                          // 输出到客户端

    cookie.setMaxAge(maxAge):maxAge(秒)为正数时表示该Cookie会在maxAge秒之后自动失效,浏览器会将该Cookie写到本地文件中,即使浏览器关闭,在maxAge秒之前再打开浏览器该Cookie仍可用
      maxAge为-1时表示该Cookie仅在本浏览器窗口以及本窗口打开的子窗口内有效,关闭窗口后该Cookie即失效。(例如窗口打开的<iframe></iframe>子窗口)
      maxAge为0时表示删除该Cookie(Cookie用此方法删除Cookie,需要new一个Name一样新Cookie,并将Value设置为“”;修改一个cookie类似)
    cookie.setPath(path):path设置为“/”时允许所有路径使用Cookie。path属性需要使用符号“/”结尾。
    cookie.setDomain(domian):domain参数必须以点(".")开始。另外,name相同但domain不同的两个Cookie是两个不同的Cookie。(Cookie是不可跨域名的)

    三:跨域名单点登录的应用

    1.使用cookie同步session

      首先存在一个用户认证接口,若存在有效cookie则放行,否则返回登陆界面。所有站点其中一个网站登录登陆后会返回一个身份标识的cookie,之后向所有站点发送登陆请求并返回相同身份标识的cookie,然后浏览器保存了各个网站域名下认证的cookie,用户再从另一个网站访问浏览器会携带认证cookie请求后台,从而通过认证。(缺点:安全性不高、cookie存储容量有限、若浏览器禁用cookie则无法同步)

    2.使用memcache缓存同步session

      单点登录后将产生的session存放在共享内存中并返回一个身份标识的cookie,同时向所有站点发送登陆请求并返回相同身份标识的cookie,此时浏览器会保存各个网站域名的认证cookie(相同的JSESSIONID),待其他网站发送请求会附带认证cookie,服务器会根据cookie的值从memcache中获取session,若存在则认证成功,否则认证失败,重新登陆。若浏览器禁用cookie或在手机浏览器上则可以将cookie的值放在请求的url上,后台获取url参数并根据它从共享区获取session同样实现用户认证

  • 相关阅读:
    一张图片入门Python
    4.1. 如何在Windows环境下开发Python
    你必须知道的EF知识和经验
    XUnit的使用
    如何使用NUnit
    Entity Framework 不支持DefaultValue
    Have You Ever Wondered About the Difference Between NOT NULL and DEFAULT?
    Validation failed for one or more entities. See 'EntityValidationErrors' property for more details
    Entity Framework 与多线程
    sqlite中的自增主键
  • 原文地址:https://www.cnblogs.com/hfblogs/p/7241457.html
Copyright © 2011-2022 走看看