精华内容
下载资源
问答
  • jessionid

    千次阅读 2014-09-21 23:18:20
    jessionid通过这样的方式来从客户端传递到服务器端,从而来标识session。 注意一点,jsessionid跟一般的url参数传递方式是不同的,不是作为参数跟在"?"后面,而是紧跟在url后面用";"来分隔。 这样在用户禁用...
    jessionid通过这样的方式来从客户端传递到服务器端,从而来标识session。
    注意一点,jsessionid跟一般的url参数传递方式是不同的,不是作为参数跟在"?"后面,而是紧跟在url后面用";"来分隔。
    这样在用户禁用cookie的时候我们也可以传递jsessionid来使用session了,
    只不过需要每次都把jseesionid作为参数跟在url后面传递。
    那这样岂不是很麻烦,每次请求一个url都要判断cookie是否可用,
    如果禁用了cookie,还要从url里解析出jsessionid,然后跟在处理完后转到的url后面,以保持jsessionid的传递。
    这些问题sun当然已经帮我们想到了。
    所以提供了2个方法来使事情变得简单:response.encodeURL()和response.encodeRedirectURL()。
    这2个方法会判断cookie是否可用,如果禁用了会解析出url中的jsessionid,并连接到指定的url后面,如果没有找到jessionid会自动帮我们生成一个。
    至于为什么要有2个方法?这2个方法有什么不同?google了一下,说是这2个方法在判断是否要包含jsessionid的逻辑上会稍有不同。
    在调用HttpServletResponse.sendRedirect前,应该先调用encodeRedirectURL()方法,否则可能会丢失Sesssion信息。
    这2个方法的使用方法如:response.sendRedirect(response.encodeURL("/myapp/input.jsp"));。
    如果cookie没有禁用,我们在浏览器地址栏中看到的地址是这样的:/myapp/input.jsp,如果禁用了cookie,我们会看到:/myapp/input.jsp;jsessionid=73E6B2470C91A433A6698C7681FD44F4。
    所以,我们在写web应用的时候,为了保险起见,应该在程序里的每一个跳转url上都使用这2个方法,来保证session的可用性。
    展开全文
  • JESSIONID理解

    千次阅读 2017-04-09 11:11:12
    熟悉web开发师经常会提到回话,什么是一个回话。比如你打开一个浏览器访问...当你登录会服务器会有个map来存放这个回话值为JESSIONID的值,value为另一个map这个map就是Session吧 但你第一次访问是它会addCook的方式把

    熟悉web开发师经常会提到回话,什么是一个回话。比如你打开一个浏览器访问一个网站之后都是为一个回话。它是依靠服务器和浏览器一起维护

    JESSEIONID就是讲服务器和浏览器结合一起的桥梁。

    如何实现了?

    下面是我的设想:

    当你登录会服务器会有个map来存放这个回话值为JESSIONID的值,value为另一个map这个map就是Session吧

    但你第一次访问是它会addCook的方式把这个JESSIONID给你。key为JESSIONID,value为JESSIONID的值

    下次你浏览器访问会看有JESSIONID的cookie吗有就带过去,没有就不带。这样就会维持了一个回话。当你的浏览器这个JESSIONID也就会删掉了



    Session技术分析与理解

       

    Session技术分析与理解

    • session是什么
    • session和cookie的区别
    • session的原理
    • session的使用方法
    • session使用需注意的细节

    1.session是什么 
    首先引入度神的解释:Session:在计算机中,尤其是在网络应用中,称为“会话控制”。Session 对象存储特定用户会话所需的属性及配置信息。这样,当用户在应用程序的 Web 页之间跳转时,存储在 Session 对象中的变量将不会丢失,而是在整个用户会话中一直存在下去。当用户请求来自应用程序的 Web 页时,如果该用户还没有会话,则 Web 服务器将自动创建一个 Session 对象。当会话过期或被放弃后,服务器将终止该会话。Session 对象最常见的一个用法就是存储用户的首选项。例如,如果用户指明不喜欢查看图形,就可以将该信息存储在 Session 对象中。有关使用 Session 对象的详细信息,请参阅“ASP 应用程序”部分的“管理会话”。注意 会话状态仅在支持 cookie 的浏览器中保留。

    博主俗人的理解: 服务器端为了保存某些数据,或实现某些必要的功能,当用户访问服务器时,将数据临时保存在服务器端以供完成服务器端的其他某些功能。服务器需要保存的数据可以以cookie的方式存储在客户端,而session的功能就是将服务器需要保存的数据存储在服务端。例如账号登录记录的功能,可以以session的方式将登录状态保存在服务器端,这样当用户访问其他程序时,需要用到登录的地方,都可以从该用户的session中取出该用户的数据,为用户服务。

    2.session和cookie的区别

    cookie是将用户的数据写给客户端(浏览器) 
    session是把用户数据写到服务器中用户独占的session里

    3.session的原理

    session的底层是基于cookie技术来实现的,当用户打开浏览器,去访问服务器的时候,服务器会为每个用户的浏览器创建一个会话对象(session对象),并且为每个session对象创建一个Jsessionid号。当session对象创建成功后,会以cookie的方式将这个Jsessionid号回写给浏览器,当用户再次进行访问服务器时,及带了具有Jsessionid号的cookie数据来一起访问服务器,服务器通过不同session的 Jsessionid号来找出与其相关联的session对象,通过不同的session对象来为不同的用户服务。

    原理图


    4.session的使用方法

    Demo1:将name保存到session里再将name从session里面取出来

    Servlet1

            response.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
            HttpSession httpSession=request.getSession();
            httpSession.setAttribute("name","zhangsan");
            response.getWriter().write("已经将名字保存在session中");
       
    • 1
    • 2
    • 3
    • 4
    • 5

    Servlet2

            response.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
            HttpSession httpSession=request.getSession(false);
            String name=(String) httpSession.getAttribute("name");
            response.getWriter().write("sesson的值为"+name);
       
    • 1
    • 2
    • 3
    • 4
    • 5

    Demo2:由于session的生效期为一个会话(及关闭浏览器就无法获得name值),但前面说了,session的内部原理为回写jsessionid号作为标识,则我们可以覆盖回写cookie的操作,设置cookie的有效期,同时也改变了session有效期(最大半小时),这样即使关闭浏览器,再次打开浏览器也能获取到name值。

    Servlet1

            response.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
            HttpSession httpSession=request.getSession();
    
            String jsessionid=httpSession.getId();
            Cookie cookie=new Cookie("JSESSIONID",jsessionid);
            cookie.setPath("/Learn1");
            cookie.setMaxAge(30*60);
            response.addCookie(cookie);
    
    
            httpSession.setAttribute("name","zhangsan");
            response.getWriter().write("已经将名字保存在session中");
       
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    Servlet2

            response.setCharacterEncoding("utf-8");
            response.setContentType("text/html;charset=utf-8");
            HttpSession httpSession=request.getSession(false);
            String name=(String) httpSession.getAttribute("name");
            response.getWriter().write("sesson的值为"+name);
       
    • 1
    • 2
    • 3
    • 4
    • 5

    Demo3: 由于有些用户浏览器可能禁止cookie的使用,导致我们的session失效了,我们面对这种情况可以采取url重写的方式,及在每个超链接背后接入jsessionid.(此种方法关闭会话浏览器后无效)

    5.session使用需注意的细节

    1. 在internet explorer7之前,打开一个浏览器为一个会话,session的作用域为一个浏览器。但目前浏览器版本,即使打开两个浏览器,他们共享session对象。
    2. 一个浏览器的多个选项卡,共享一个session对象。
    3. session的有效期最大为半个小时,及客户端半小时内无任何操作,服务器将会把该session对象摧毁。
    4. session的回写cookie的ID名字为:JSESSIONID

    展开全文
  • //设置有效的非活动时间 /* 服务器会自动产生一个sessionId 通过getId()方法来得到这个sessionId 将这个sessionId加入到cookie中,客户端带过来的cookie来获取JESSIONID */ //输出看看sessionId的值,看控制台 ...

    session:一次请求的开始到关闭就是一次会话
    比如:访问淘宝,再关闭淘宝,在你这次的访问淘宝的时间段内sesison都是共享的
    session的机制:
    客户端访问服务器的同时,服务器会产生一个session对象,这个session对象可以用来保存客户的信息,比如用户名和密码
    从我理解来看这个对象里有id的属性,服务器会将这个id的属性值复制一份,也就是JESSONID,这个值会自动的和Cookie进行绑定,当响应客户端的同时,cookie会带着JESSIONID放到客户端
    总结:本质上来说sessonId和JESSONID就是一个东西,方便客户端和服务器来识别的,判断是否是同一个请求内
    验证实例结构图:
    在这里插入图片描述

    <body>   
     <form action="success.jsp">
      用户名:<input type="text" name="uname" ></br>    
    密码:<input type="password" name="upwd"></br>     
     <input type="submit" value="登录">
    </form>  
    </body>
    

    提交表单单登录成功,会在服务器端产生一个sessionId
    我们看success,jsp响应页面:

    <body>
      <%
      response.setContentType("utf-8");
      String name=request.getParameter("uname");
     String  pwd=request.getParameter("upwd");
    if(name.equals("张三")&& pwd.equals("123")){
      session.setAttribute("uname", name);
     session.setAttribute("upwd", pwd);
     //session.setMaxInactiveInterval(10);//设置有效的非活动时间
      /* 服务器会自动产生一个sessionId
      通过getId()方法来得到这个sessionId
    将这个sessionId加入到cookie中,客户端带过来的cookie来获取JESSIONID
     */
     //输出看看sessionId的值,看控制台
     System.out.println("sessionId"+session.getId());//第一次请求访问服务端就会产生一个sessionid
     //这是给客户端回传的cookie
     Cookie cookie =new  Cookie("uname",name);
     response.addCookie(cookie);  
     response.sendRedirect("a.jsp");                                      
    

    看我们的客户端页面a.jsp

    <body>
        <%
        //这里重新访问a.jsp页面
        /* 在cookie中可以拿到JESSSIONID
         通过getValue();
        最后发现JSESSIONID和sessionid的值的一样的
        服务端的sessionid和客户端的JSESSIONID是一一对应的
        */
          Cookie[] cookies=request.getCookies();
         for(Cookie s: cookies){
        	 if(s.getName().equals("JSESSIONID")){ //请求响应会在响应中把sessionId复制一份成JESSIONID带给客户端
        	   //看控制台
        		 System.out.print("JSESSIONID"+s.getValue());
        	 }
         }
        %>
    </body>
    

    现将控制台清掉:
    在这里插入图片描述
    访问:
    在这里插入图片描述
    之后看控制台结果一模一样,由此可见服务端的sessionId和控制台的JESSIONID是一样的
    在这里插入图片描述

    展开全文
  • java 转换 IE JESSIONID

    2019-08-02 11:38:33
    NULL 博文链接:https://lspgdut.iteye.com/blog/1973323
  • JESSIONID概念

    2018-02-06 21:37:55
    不管能不能修改jsessionid,都不应该修改,如果你修改了,这就失去了jessionid的自身意义了,你修改的话,你让服务器那边如何找到对应的session?找不到的话,你存放在那个session中的数据不是取不到了吗? 登陆...

    两个jsessionid???

    这里写图片描述

    1.是不是只要一打开一个页面就会产生一个jsessionid?
    答:显然不是的。session是有一定作用域的,而且是有时间限制的。
    jsessionid是session的标识。这就好比每个人都有身份证一样。
    Jsessionid只是tomcat的对sessionid的叫法,其实就是sessionid;在其它的容器也许就不叫jsessionid了。
    Jsessionid其实就是session id。
    session是根据散列值来产生的,所以不同的机器产生出不同的seission id 也很正常。

    所谓session你可以这样理解:当你与服务端进行会话时,比如说登陆成功后,服务端会为你开辟一块内存区间,用以存放你这次会话的一些内容,比如说用户名之类的。那么就需要一个东西来标志这个内存区间是你的而不是别人的,这个东西就是session id(jsessionid只是tomcat中对session id的叫法,在其它容器里面,不一定就是叫jsessionid了。),而这个内存区间你可以理解为session。
    然后,服务器会将这个session id发回给你的浏览器,放入你的浏览器的cookies中(这个cookies是内存cookies,跟一般的不一样,它会随着浏览器的关闭而消失)。
    之后,只有你浏览器没有关闭,你每向服务器发请求,服务器就会从你发送过来的cookies中拿出这个session id,然后根据这个session id到相应的内存中取你之前存放的数据。
    但是,如果你退出登陆了,服务器会清掉属于你的内存区域,所以你再登的话,会产生一个新的session了。

    2.在不关闭浏览器的情况下,什么时候jsessionid会改变?我登陆后,登陆然后退出,jsessionid会有什么变化?
    答:jsessionid是服务器那边生成的,因为cookie是服务器那边送到客户端的信息。不管能不能修改jsessionid,都不应该修改,如果你修改了,这就失去了jessionid的自身意义了,你修改的话,你让服务器那边如何找到对应的session?找不到的话,你存放在那个session中的数据不是取不到了吗?
    登陆然后退出,我认为会重新生成一个jsessionid。因为退出的话,application作用域的数据都会丢失,更何况这个比它作用域还小的session?既然session都消失了,这个jsessionid有什么用?


    用户的登录退出,jsessionid 的 值 会发生改变

    关于session和jsessionid的问题

    jsessionid所引起的问题 和解决

    由JSESSIONID谈cookie与SESSION的区别和联系

    url中的jsessionid解释

    展开全文
  • springboot项目中集成了cas,清除缓存,想要跳到登陆页面,但是由于地址栏中带有jessionId标识,导致无法正常跳转。 Jsessionid只是tomcat的对sessionid的叫法,其实就是sessionid;在其它的容器也许就不叫...
  • 近日手头上有一份蛋疼的渗透测试报告,洋洋洒洒列了...按照字面理解呢,就是JESSIONID放在url中,直接列在浏览器上,安全公司认为这是敏感信息,不宜大张旗鼓的展示。 好吧,我改。55555555555........... 先给大...
  • cookie、session、jessionid区别 1、cookie、session都可以用来存储数据 2、cookie数据存放在客户的浏览器上,session数据放在服务器上 3、Jsessionid只是tomcat的对sessionid的叫法,其实就是sessionid;在其它的...
  • session与jessionid的关系

    2019-04-24 09:42:04
    首先,并不是说你一打开一个页面就会产生一个session。 所谓session你可以这样理解:当你与服务端进行会话时, ... ... 那么就需要一个东西来标志这个内存区间是你的而不是别人的 ...,这个东西就是sessionid(jsessionid...
  • hiro自动生成的JESSIONID

    2018-11-04 22:30:16
    我们项目的就是基于tomcat容器和SpringBoot、shiro权限与安全框架进行部署的,那么我最先的思路就是查找tomcat容器为何会重写URL,自动加上JESSIONID,我的做法是这样的: 1、百度一下,我就知道 2、百度一下...
  • 使用shiro进行权限认证时,登录地址第一次访问总是自动携带JESSIONID,现在需要把它去掉不能显示。 问题描述: 首先翻遍百度发现大多数解决方案就是在DefaultWebSecurityManager注入时设置sessionManager。该方法还...
  • jessionid=abcdefg是如何产生的解决方法:问题重现方法 前提是调用String newurl = response.encodeRedirectURL("/workbench/abc/def");,也就是用response调用encodeRedirectURL这个方法。 最终会用到org...
  • 漏洞存在原因: 登录url后面暴露了JESSIONID,得想办法去掉 首先我的项目是基于springboot 2 + shiro 1.4.0 这两个版本的 在项目配置文件application.yml修改tomcat属性 server: servlet: session: tracking-modes: ...
  • 如果你的shiro版本在1.3.2版本以上这个BUG已经解决只需要在配置文件如下配置中添加红色部分 把这三个版本提高   org.apache.shiro shiro-core 1.4.0 org.apache.shiro shiro-web ...ses
  • 前台使用wx.request方法请求的话 head里面的jessionid会一直变得 所以 后台需要这样处理 session.getId() 之后response.getWriter().write(session.getId()); 之后让前台 放到head里面就可以了 可能有些人用了...
  • shiro 404 jessionid

    2015-04-20 11:38:00
    2019独角兽企业重金招聘Python工程师标准>>> ...
  • Disable jessionid in the URL

    2015-07-21 00:27:55
    For tomcat 7 add this to web.xml COOKIE
  • Tomcat的JessionId

    2013-11-07 10:24:08
    tomcat会生成jessionId传递给浏览器,浏览器保存在会话cookie中,当浏览器再去向服务器发送请求的时候,这个jessionId也会发送到服务器端,通过jessionId来找到服务器端为用户维持的一个session。我想求教的是,这个...
  • jetty disabled jessionId in url

    千次阅读 2014-05-29 10:51:09
    使用jetty过程中,碰到一个老问题:jessionId 被追加在url的情况。在使用tomcat 7容器时,这个方法很容易被解决,详情请参考:tomcat disable jessionId in url。  盲搜了一些解决方法但是尝试之后似乎没有效果,...
  • NULL 博文链接:https://mysun.iteye.com/blog/413836

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,034
精华内容 813
关键字:

jessionid