精华内容
下载资源
问答
  • 会话管理

    千次阅读 2017-07-25 08:55:24
    1、会话管理 1.1、注意点 1.1 如果没有设置cookie的有效路径,则默认情况:有效路径在当前web应用下。/SessionManger 1.2、 Cookie的有效时间从最后不调用Cookie开始计算 1.3、 Cookie只能保持非中文字符串类型的...

    1、会话管理

    1.1、注意点

    1.1 如果没有设置cookie的有效路径,则默认情况:有效路径在当前web应用下。/SessionManger

    1.2、 Cookie的有效时间从最后不调用Cookie开始计算

    1.3、 Cookie只能保持非中文字符串类型的数据

    1.4、 浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie得大小限制为4kb

    1.5、 域对象存储数据,若要取出数据必须保证是同一个域对象才行

    1.6、我们只要将sessionId封装到一个Cookie中Cookie cookie = new Cookie("JSESSIONID", sessionID);服务器在获取Session的时候会自动更具这个sessionId去服务器中寻找

     

    2、会话管理

     

    会话管理:管理浏览器客户端 服务器端之间会话过程中产生的会话数据。

     

    域对象: 实现资源之间的数据共享。

     

    request域对象

    context域对象

     

    解决办法: 可以使用session域对象来保存会话数据!!!

     

    3、会话技术

    3.1 Cookie技术:会话数据保存在浏览器客户端。

    3.2 Session技术:会话数据保存在服务器端。

     

    4、Cooke技术

    4.1 特点

    Cookie技术:会话数据保存在浏览器客户端。

     

     

    4.2 Cookie技术核心

    Cookie类:用于存储会话数据

     

    1)构造Cookie对象

    Cookie(java.lang.String name, java.lang.String value)

    2)设置cookie

    void setPath(java.lang.String uri)   :设置cookie的有效访问路径

    void setMaxAge(int expiry) : 设置cookie的有效时间

    void setValue(java.lang.String newValue) :设置cookie的值

    3)发送cookie到浏览器端保存

    void response.addCookie(Cookie cookie)  : 发送cookie

    4)服务器接收cookie

    Cookie[] request.getCookies()  : 接收cookie

     

    4.3 Cookie原理

    1)服务器创建cookie对象,把会话数据存储到cookie对象中。

    new Cookie("name","value");

    2) 服务器发送cookie信息到浏览器

    response.addCookie(cookie);

     

    举例: set-cookie: name=eric  (隐藏发送了一个set-cookie名称的响应头)

    3)浏览器得到服务器发送的cookie,然后保存在浏览器端。

    4)浏览器在下次访问服务器时,会带着cookie信息

        举例: cookie: name=eric  (隐藏带着一个叫cookie名称的请求头)

    5)服务器接收到浏览器带来的cookie信息

    request.getCookies();

    4.4 Cookie的细节

    1)void setPath(java.lang.String uri)

    设置cookie的有效访问路径。有效路径指的是cookie的有效路径保存在哪里,那么浏览器在有效路径下访问服务器时就会带着cookie信息,否则不带cookie信息。

    2)void setMaxAge(int expiry)

    设置cookie的有效时间。

    正整数:表示cookie数据保存浏览器的缓存目录(硬盘中),数值表示保存的时间。

    负整数:表示cookie数据保存浏览器的内存中。浏览器关闭cookie就丢失了!!

    零:表示删除同名的cookie数据

    3)Cookie数据类型只能保存非中文字符串类型的。可以保存多个cookie,但是浏览器一般只允许存放300个Cookie,每个站点最多存放20个Cookie,每个Cookie的大小限制为4KB。

     

     

     

    5、Session技术

    5.1 引入

    A)Cookie的局限:

    1)Cookie只能存字符串类型。不能保存对象

    2)只能存非中文。

    3)1个Cookie的容量不超过4KB。

     

    如果要保存非字符串,超过4kb内容,只能使用session技术!!!

    B)Session特点:

    会话数据保存在服务器端。(内存中)

     

    5.2 Session技术核心

    HttpSession类:用于保存会话数据

     

    1)创建或得到session对象

    HttpSession getSession()  

    HttpSession getSession(boolean create)  

    2)设置session对象

    void setMaxInactiveInterval(int interval)  : 设置session的有效时间

    void invalidate()     : 销毁session对象

    java.lang.String getId()  : 得到session编号

    3)保存会话数据到session对象

    void setAttribute(java.lang.String name, java.lang.Object value)  : 保存数据

    java.lang.Object getAttribute(java.lang.String name)  : 获取数据

    void removeAttribute(java.lang.String name) : 清除数据

     

    5.3 Session原理

    A)问题: 服务器能够识别不同的浏览者!!!

    现象:

     

    前提: 在哪个session域对象保存数据,就必须从哪个域对象取出!!!!

    浏览器1:(给s1分配一个唯一的标记:s001,把s001发送给浏览器)

    1)创建session对象,保存会话数据

    HttpSession session = request.getSession();   --保存会话数据 s1

    浏览器1 的新窗口(带着s001的标记到服务器查询,s001->s1,返回s1)

    2)得到session对象的会话数据

      HttpSession session = request.getSession();   --可以取出  s1

        新的浏览器1:(没有带s001,不能返回s1)

    3)得到session对象的会话数据

    HttpSession session = request.getSession(); --不可以取出  s2

    浏览器2:(没有带s001,不能返回s1)

    4得到session对象的会话数据

    HttpSession session = request.getSession(); --不可以取出  s3

     

    B)代码解读:HttpSession session = request.getSession();

    1)第一次访问创建session对象,给session对象分配一个唯一的ID,叫JSESSIONID

    new HttpSession();

    2)把JSESSIONID作为Cookie的值发送给浏览器保存

    Cookie cookie = new Cookie("JSESSIONID", sessionID);

    response.addCookie(cookie);

    3)第二次访问的时候,浏览器带着JSESSIONID的cookie访问服务器

    4)服务器得到JSESSIONID,在服务器的内存中搜索是否存放对应编号的session对象。

    if(找到){

    return map.get(sessionID);

    }

    Map<String,HttpSession>]

    <"s001", s1>

    <"s001,"s2>

    5)如果找到对应编号的session对象,直接返回该对象

    6)如果找不到对应编号的session对象,创建新的session对象,继续走1的流程

    结论:通过JSESSION的cookie值在服务器找session对象!!!!!

    5.4 Sesson细节

    1)java.lang.String getId()  :

    得到session编号

    2)两个getSession方法:

    getSession(true) / getSession()  :

    创建或得到session对象。没有匹配的session编号,自动创建新的session对象。

    getSession(false):  

    得到session对象。没有匹配的session编号,返回null

    3)void setMaxInactiveInterval(int interval)  :

    设置session的有效时间

    4) session对象销毁时间:

    4.1 默认情况30分服务器自动回收

    4.2 修改session回收时间

    4.3 全局修改session有效时间

    <!-- 修改session全局有效时间:分钟 -->

    <session-config>

    <session-timeout>1</session-timeout>

    </session-config>

     

    4.4.手动销毁session对象

    void invalidate()     : 销毁session对象

    5)如何避免浏览器的JSESSIONID的cookie随着浏览器关闭而丢失的问题

    /**

     * 手动发送一个硬盘保存的cookie给浏览器

     */

    Cookie c = new Cookie("JSESSIONID",session.getId());

    c.setMaxAge(60*60);

    response.addCookie(c);

     

     

    总结会话管理: 浏览器和服务器会话过程中的产生的会话数据的管理。

     

     

     

     

     

     

    展开全文
  • Shiro提供了完整的企业级会话管理功能,不依赖于底层容器(如web容器tomcat),直接使用Shiro的会话管理可以直接替换如Web容器的会话管理
  • session会话管理

    2014-08-04 20:18:27
    session会话管理,session的原理,API,应用案例
  • 5G会话管理.pptx

    2021-03-07 19:43:36
    5G会话管理
  • Servlet会话管理

    2017-10-26 16:18:26
    servlet会话管理教学课件,适用于初学者以及相关爱好者。仅供参考。
  • 了解会话管理机制
  • 主要介绍了JavaWeb Session 会话管理的相关资料,非常不错,具有参考借鉴价值,感兴趣的朋友一起看看吧
  • JT会话管理器-源码

    2021-02-27 07:56:17
    JT会话管理
  • 会话管理: 因为HTTP是没有状态的,之前认证缺陷的也会涉及到类似的知识点,由于每次请求完成后链接就会断开,当客户端再次发起请求的时候,服务端就识别不了客户端的状态,而会话管理就是解决这一问题的,其中一种...
  • tomcat会话之持久化会话管理

    千次阅读 2015-09-10 10:47:04
    前面提到的标准会话管理器已经提供了基础的会话管理功能,但在持久化方面做得还是不够,或者说在某些情景下无法满足要求,例如把会话以文件或数据库形式存储到存储介质中,这些都是标准会话管理器无法做到的,于是...

    前面提到的标准会话管理器已经提供了基础的会话管理功能,但在持久化方面做得还是不够,或者说在某些情景下无法满足要求,例如把会话以文件或数据库形式存储到存储介质中,这些都是标准会话管理器无法做到的,于是另外一种会话管理器被设计出来——持久化会话管理器。

    在分析持久化会话管理器之前不妨先了解另外一个抽象概念会话存储设备Store,引入这个概念是为了更清晰方便地实现各种会话存储方式。作为存储设备最重要的操作无非就是读写操作,读即是将会话从存储设备加载到内存中,而写则将会话写入存储设备中,所以定义了两个重要的方法loadsave与之相对应。FileStoreJDBCStore只要扩展Store接口各自实现loadsave

    展开全文
  • Web会话管理

    2020-07-01 10:06:25
    1.会话管理基本原理 1.隐藏域 将表单中的内容在显示页面时隐藏,不显示数据,在JSP 中将input标签type设置为hidden 生成一个隐藏表单域。将会话的唯一标识记录到隐藏域中的value值中,并设定name值。提交给服务器...

    1.会话管理基本原理
    1.隐藏域
    将表单中的内容在显示页面时隐藏,不显示数据,在JSP 中将input标签type设置为hidden 生成一个隐藏表单域。将会话的唯一标识记录到隐藏域中的value值中,并设定name值。提交给服务器之后,服务器会根据根据会话标识找到会话对象。
    缺点:实现比较麻烦,安全性差,不适合隐秘性的数据
    2.cookie
    服务端保存会话对象中设定会话的唯一标识,客户端将会话标识存在cookie中,当浏览器发送请求时从cookie取得会话标识发给服务端。
    3.URL重写
    在URL地址末尾添加会话标识,改写原先的URL地址,唯一标识会话的信息以参数的形式添加到URL中,主要使用在浏览器cookie被禁用的情况下。
    缺点:整个Web应用中,超链接或者脚本中用到URL需添加会话标识,Web应用中每个页面都需要动态生成,当客户端访问静态页面时,会话标识会丢失,重回动态页面时不能继续此前会话。
    禁用cookie
    在Web项目中禁用 打开或者创建context.xml文件

    <?xml version="1.0" encoding = "utf-8"?>
    <Context cookies = "false" path = "/ch06">//这里是对单个项目的Cookie禁用
    </Context>
    

    HttpSession会话管理
    每个请求者对应一个Session对象,客户端所有状态信息都保存在该对象里,第一次请求服务器时创建Session对象。
    对于Servlet中

    HttpSession session = request.getSession();//获取session对象
    session.setAttribute("","");//设置session中的属性
    

    对于JSP中内置Session对象
    HttpSession的生命周期
    1.HttpSession对象的创建
    客户端第一次访问服务器时,服务器为每个浏览器创建不同的SessionID值
    2.HttpSession对象的使用
    在创建HttpSession对象后,使用Session对象进行数据的存取和传输
    (1).将创建的SessionID值存到cookie中
    (2).当客户端再次发起请求时,会将SessionID与request一起发送给服务器
    (3).服务器根据请求过来的SessionID与保存在服务器端的Session对应起来
    3.HttpSession对象的消亡
    (1).将浏览器关闭
    (2).调用HttpSession的invalidate()方法
    (3).Session超时
    HttpSession的有效期
    为Session设定一个有效器,当某用户访问session超过这个有效期那么session失效,将它从内存清除。
    (只有访问JSP,Servlet时才会创建session,访问静态页面时是不会创建session对象)
    设置有效期:
    1.在对应的Web服务器配置中设置所有session的有效期
    2.调用session中的setMaxInactiveInterval(long interval)进行设定
    在web.xml中修改

    <session-config>
    	<!--会话时长为30分钟-->
    	<session-timeout>30</session-timeout>
    </session-config>	
    

    HttpSession会话管理实例演示
    jsp源代码

    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    <%
        request.setCharacterEncoding("utf-8");
        String message = "";
        String flag = request.getParameter("flag");
        if ((flag!=null)&&(flag.equals("small"))){
            message = "太小了";
        }else if((flag!=null)&&(flag.equals("big"))){
            message = "太大了";
        }else if ((flag!=null)&&(flag.equals("success"))){
            message = "猜对了";
        }
    %>
    <html>
    <head>
        <title>猜数字</title>
    </head>
    <body>
        <form action="<%=request.getContextPath()%>/test" method="post">
            请输入你的数字:<input type="text" name="number"/>
            <span style="color: red"><%=message%></span>
            <input type="submit" value="提交">
        </form>
    
    </body>
    </html>
    

    .java源码

     public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException,IOException{
            request.setCharacterEncoding("utf-8");
            String gussnumber = request.getParameter("number");
            int number = Integer.parseInt(gussnumber);
            HttpSession session = request.getSession();
            Integer currnumber = (Integer) session.getAttribute("currnumber");
            if(currnumber ==null){
                currnumber = 1+(int)(Math.random()*50);
                session.setAttribute("currnumber",currnumber);
            }
            if(number>currnumber){
                RequestDispatcher re = request.getRequestDispatcher("/until6HttpSession随机数.jsp?flag=big");
                re.forward(request,response);
            }else if(number<currnumber){
                RequestDispatcher re = request.getRequestDispatcher("/until6HttpSession随机数.jsp?flag=small");
                re.forward(request,response);
            }else {
                RequestDispatcher re = request.getRequestDispatcher("/until6HttpSession随机数.jsp?flag=success");
                re.forward(request,response);
            }
        }
    

    主要是使用Math.random方法产生1~50的随机数,并将它保存在session中。判断逻辑之后,利用RequestDispatcher中的forward方法跳转。

    展开全文
  • JavaWeb学习-会话管理系列-1-会话概述.pdf
  • 会话管理器管理着应用中所有Subject的会话的创建、维护、删除、失效、验证等工作。是Shiro 的核心组件,顶层组件SecurityManager 直接继承了SessionManager,且提供了SessionsSecurityManager 实现直接把会话管理...

    会话管理器管理着应用中所有Subject的会话的创建、维护、删除、失效、验证等工作。是Shiro 的核心组件,顶层组件SecurityManager 直接继承了SessionManager,且提供了SessionsSecurityManager 实现直接把会话管理委托给相应的SessionManager ,DefaultSecurityManager 及DefaultWebSecurityManager 默认SecurityManager 都继承了SessionsSecurityManager

    SecurityManager提供了如下接口:

    Session start(SessionContext context); //启动会话
    Session getSession(SessionKey key) throws SessionException; //根据会话Key获取会话

    另外用于Web环境的WebSessionManager又提供了如下接口:

    boolean isServletContainerSessions();//是否使用Servlet容器的会话

    Shiro 还提供了ValidatingSessionManager用于验资并过期会话:

    void validateSessions();//验证所有会话是否过期


    Shiro 提供了三个默认实现:

    DefaultSessionManager:DefaultSecurityManager使用的默认实现,用于JavaSE 环境;

    ServletContainerSessionManager:DefaultWebSecurityManager使用的默认实现,用于Web环境,其直接使用Servlet 容器的会话;

    DefaultWebSessionManager : 用于Web 环境的实现, 可以替代ServletContainerSessionManager,自己维护着会话,直接废弃了Servlet容器的会话管理。


    JavaEE环境替换SecurityManager默认的SessionManager可以在ini中配置(shiro.ini),:

    [main]
    sessionManager=org.apache.shiro.session.mgt.DefaultSessionManager
    securityManager.sessionManager=$sessionManager

    另外可以设置会话的全局过期时间(毫秒为单位),默认30分钟:

    sessionManager.globalSessionTimeout=1800000

    默认情况下globalSessionTimeout 将应用给所有Session。可以单独设置每个Session 的timeout属性来为每个Session设置其超时时间。

    Web 环境下的ini配置(shiro-web.ini):

    [main]
    sessionManager=org.apache.shiro.web.session.mgt.ServletContainerSessionManager
    securityManager.sessionManager=$sessionManager

    另外如果使用ServletContainerSessionManager 进行会话管理,Session 的超时依赖于底层Servlet容器的超时时间,可以在web.xml中配置其会话的超时时间(分钟为单位):

    <session-config>
    	<session-timeout>20</session-timeout>
    </session-config>

    在 Servlet容器中,默认使用JSESSIONID Cookie 维护会话,且会话默认是跟容器绑定的;

    在某些情况下可能需要使用自己的会话机制,此时我们可以使用DefaultWebSessionManager来维护会话:

    sessionIdCookie=org.apache.shiro.web.servlet.SimpleCookie
    sessionManager=org.apache.shiro.web.session.mgt.DefaultWebSessionManager
    sessionIdCookie.name=sid
    #sessionIdCookie.domain=sishuok.com
    #sessionIdCookie.path=
    sessionIdCookie.maxAge=1800
    sessionIdCookie.httpOnly=true
    sessionManager.sessionIdCookie=$sessionIdCookie
    sessionManager.sessionIdCookieEnabled=true
    securityManager.sessionManager=$sessionManager

    sessionIdCookie是sessionManager创建会话Cookie的模板:

    sessionIdCookie.name:设置Cookie 名字,默认为JSESSIONID;

    sessionIdCookie.domain:设置Cookie的域名,默认空,即当前访问的域名;

    sessionIdCookie.path:设置Cookie 的路径,默认空,即存储在域名根下;

    sessionIdCookie.maxAge:设置Cookie 的过期时间,秒为单位,默认-1 表示关闭浏览器时过期Cookie;

    sessionIdCookie.httpOnly:如果设置为true,则客户端不会暴露给客户端脚本代码,使用HttpOnly cookie有助于减少某些类型的跨站点脚本攻击;此特性需要实现了Servlet 2.5 MR6及以上版本的规范的Servlet容器支持;

    sessionManager.sessionIdCookieEnabled:是否启用/禁用Session Id Cookie,默认是启用的;如果禁用后将不会设置Session Id Cookie,即默认使用了Servlet容器的JSESSIONID,且通过URL重写(URL中的“;JSESSIONID=id”部分)保存Session Id。


    另外我们可以如“sessionManager. sessionIdCookie.name=sid”这种方式操作Cookie 模板。

    展开全文
  • 会话管理 Session

    2018-07-05 11:04:23
    会话管理 Session 1.概述 Shiro 提供了完整的企业级会话管理功能, 不依赖与底层容器(如tomcat). 不管是javase还是javaee环境都能使用, 提供了会话管理,会话事件监听,会话存储/持久化,容器无关的集群、...
  • 会话中间件会话提供Macaron的会话管理。 它可以使用许多会话提供程序,包括内存,文件,Redis,Memcache,PostgreSQL,MySQL,Couchbase,Ledis和Nodb。 安装最小的r会话中间件会话提供Macaron的会话管理。 它可以...
  • 在线云客服管理系统、会话管理、访客管理、客户管理、工单管理、会话记录、考勤统计、数据报表、工单设置、全局设置、转人工服务、自动回复、客户标签、客服监控、客服系统、前端会话、客服管理、在线客服 、人工...
  • webservice5 会话管理

    2011-01-25 15:48:36
    webservice5 会话管理 webservice5 会话管理 webservice5 会话管理
  • 主要介绍了asp.net微信开发中有关自定义会话管理的相关内容,需要的朋友可以参考下
  • 会话管理 该类用于维护和管理网站的会话。 通过本课程,您可以: 开始会话。 重新生成会话 ID。 检查会话是否有效。 关闭会话。 在这个类中,可以使用用户的指纹来验证会话。 指纹包括安全词、IP 地址、浏览器...
  • SCS:Go功能的HTTP会话管理通过中间件自动加载和保存会话数据。 选择服务器端会话存储,包括PostgreSQL,MySQL,Redis,BadgerDB和BoltDB。 Custom的SCS:Go功能的HTTP会话管理通过中间件自动加载和保存会话数据。 ...
  • spring session分布式session会话管理 分布式系统session的管理
  • 会话管理之Cookie技术

    千次阅读 2016-04-27 13:54:09
    会话管理是web开发中比较重要的环节,这一节主要总结下会话管理中的cookie技术。 1. 何为会话  会话可简单理解为:用户开一个浏览器,点击多个超链接,访问服务器多个web资源,然后关闭浏览器,整个过程称为一个...
  • shiro——session会话管理

    万次阅读 2019-08-23 18:02:53
    1.2 SessionManager 会话管理 1.3 SessionListener 会话监听 2. 会话持久化 2.1 SessionDAO接口 2.2AbstractSessionDAO类 2.3 CachingSessionDAO 类 2.4 EnterpriseCacheSessionDAO 类 2.5 Memo...
  • Web会话管理漏洞安全介绍;会话管理漏洞;会话劫持;会话劫持;会话劫持漏洞概念;会话劫持攻击步骤;会话劫持漏洞概念图;如何获取Cookie;劫持cookie - XSS劫持;劫持cookie - 中间人攻击;会话被劫持会有什么危害;Cookie...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 355,470
精华内容 142,188
关键字:

会话管理