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

    2016-08-21 15:33:23
    jsessionid

    简述jsessionid:

    做web开发的同学都知道,http是无状态的会话协议,也就是说无法保存用户的信息。那如果有一些信息需要在用户的浏览活动中一直保持,该怎么做呢?我们可以把这些信息在每次请求的时候作为参数传递给服务器,但这样做既麻烦又耗费资源,这时候就体现出了session的重要性。session是web开发中不可或缺的一个特性。它是对于一个特定的用户请求,在web服务器上保存的一个全局变量。有了它我们就可以把用户的一些信息保存在服务器上,而不用在服务器和客户端之间来回传递。知道了session的作用,那session是怎么实现的呢?服务器上为每个用户都保存了一个session,那当用户请求过来的时候是怎么知道某一个用户应该对应哪个session呢?这时jsessionid就派上用场了。每一个session都有一个id来作为标识,这个id会传到客户端,每次客户端请求都会把这个id传到服务器,服务器根据id来匹配这次请求应该使用哪个session。jsessionid就是客户端用来保存sessionid的变量,主要是针对j2ee实现的web容器,没有研究过其他语言是用什么变量来保存的。一般对于web应用来说,客户端变量都会保存在cookie中,jsessionid也不例外。不过与一般的cookie变量不同,jsessionid是保存在内存cookie中的,在一般的cookie文件中是看不到它的影子的。内存cookie在打开一个浏览器窗口的时候会创建,在关闭这个浏览器窗口的时候也同时销毁。这也就解释了为什么session变量不能跨窗口使用,要跨窗口使用就需要手动把jsessionid保存到cookie里面。

    通俗的解释一下,jsessionid的相关过程:

    从浏览器进入a.jsp,携带a.jsp的提交数据请求服务器,,

    如果是第一次运行,(会在服务器查找jsessionid,如果没找到相应的jsessionid)在浏览器端会开辟一个空间来存放这些数据,这个空间有一个唯一标示符,即为jsessionid,(),所以第一次是没有jsessionid的,(在使用session时记得判断是否为空),

    如果是不是第一次运行,就会用浏览器端的jsessionid去服务器端匹配jsessionid,(就可以取得里面的值了),

    配上一幅图,希望能更好的理解:





    以下为别人的总结,,链接:http://blog.csdn.net/chunqiuwei/article/details/23461995

    1)第一次访问服务器的时候,会在响应头里面看到Set-Cookie信息(只有在首次访问服务器的时候才会在响应头中出现该信息)

    上面的图JSESSIONID=ghco9xdnaco31gmafukxchph;Path=/acr

    浏览器会根据响应头的set-cookie信息设置浏览器的cookie并保存之

    注意此cookie由于没有设置cookie有效日期,所以在关闭浏览器的情况下会丢失掉这个cookie。

    2)当再次请求的时候(非首次请求),浏览器会在请求头里将cookie发送给服务器(每次请求都是这样)

    (JSESSIONID=ghco9xdnaco31gmafukxchph)

    不难发现这个的jsessionid和上面的jsessionid是一样的

    3)为什么除了首次请求之外每次请求都会发送这个cookie呢(在这里确切地说是发送这个jsessionid)?

    事实上当用户访问服务器的时候会为每一个用户开启一个session,浏览器是怎么判断这个session到底是属于哪个用户呢?jsessionid的作用就体现出来了:jsessionid就是用来判断当前用户对应于哪个session。换句话说服务器识别session的方法是通过jsessionid来告诉服务器该客户端的session在内存的什么地方。

    事实上jsessionid ==request.getSession().getId()

    4)总结,jsessionid的工作流程可以简单用下面的图表示:

    展开全文
  • JSESSIONID

    千次阅读 2019-03-06 20:24:36
    在js中获取cookie的值: 数据格式: 遍历: 可以通过在url上拼接;JSESSIONID=xxx达到效果; localhost:8081/index;JSESSIONID=xxx

     

    在js中获取cookie的值:

     

    数据格式: 

    遍历:

    可以通过在url上拼接;JSESSIONID=xxx达到效果;

    localhost:8081/index;JSESSIONID=xxx

    展开全文
  • jsessionID

    2011-05-14 15:33:00
    jsessionID


    在web应用的开发中我们会经常看到这样的url:http://www.xxx.com/xxx_app;jsessionid=xxxxxxxxxx?a=x&b=x...。这跟一般的url基本一样,只有一个地方有区别,那就是“;jessionid=xxxxxxxx”。这个参数有时候有,有时候又没有,说它是参数可又跟一般传递的参数不同,它是紧跟在url后面用分号来分隔的,用一般的request.getParameter()方法还取不到。那这个参数到底是干嘛用的呢?要了解它还要先了解session的实现方式。

    session的实现方式

    做web开发的同学都知道,http是无状态的会话协议,也就是说无法保存用户的信息。那如果有一些信息需要在用户的浏览活动中一直保持,该怎么做呢?我们可以把这些信息在每次请求的时候作为参数传递给服务器,但这样做既麻烦又耗费资源,这时候就体现出了session的重要性。session是web开发中不可或缺的一个特性。它是对于一个特定的用户请求,在web服务器上保存的一个全局变量。有了它我们就可以把用户的一些信息保存在服务器上,而不用在服务器和客户端之间来回传递。知道了session的作用,那session是怎么实现的呢?服务器上为每个用户都保存了一个session,那当用户请求过来的时候是怎么知道某一个用户应该对应哪个session呢?这时jsessionid就派上用场了。每一个session都有一个id来作为标识,这个id会传到客户端,每次客户端请求都会把这个id传到服务器,服务器根据id来匹配这次请求应该使用哪个session。jsessionid就是客户端用来保存sessionid的变量,主要是针对j2ee实现的web容器,没有研究过其他语言是用什么变量来保存的。一般对于web应用来说,客户端变量都会保存在cookie中,jsessionid也不例外。不过与一般的cookie变量不同,jsessionid是保存在内存cookie中的,在一般的cookie文件中是看不到它的影子的。内存cookie在打开一个浏览器窗口的时候会创建,在关闭这个浏览器窗口的时候也同时销毁。这也就解释了为什么session变量不能跨窗口使用,要跨窗口使用就需要手动把jsessionid保存到cookie里面。

    jsessionid的作用

    在以上的文字中我们了解了session的实现原理,同时也知道了session跟jsessionid紧密不可分割的联系。只有通过jsessionid才能使session机制起作用,而jsessionid又是通过cookie来保存。看到这里,也许你会发现一个问题,如果用户禁用了cookie,那jsessionid不是就不能保存了吗?session不是不起作用了吗?我们真的对此束手无策了吗?当然不是。在用户禁用了cookie时候,我们可以通过url重写来实现jsessionid的传递。这就是我上面指出的那样的url:http://www.xxx.com/xxx_app;jsessionid=xxxxxxxxxx?a=x&b=x..。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的可用性。

    说道这里,大家应该对jsessionid和session的关系,以及jsessionid的作用有个了一个大致的了解,具体应用还要自己在项目中具体情况具体对待。

     ================================================================================

    关于Session生命周期的问题,

    书中讲:
    以下情况,Session结束生命周期,Servlet容器将Session所占资源释放:
    1.客户端关闭浏览器
    2.Session过期
    3.服务器端调用了HttpSession的invalidate()方法。

     

    web.xml中
    60


    60

    "一个浏览器就是一个新session,关了浏览器session就结束了"
    session 是在服务器端建立的,浏览器访问服务器会有一个jsessionid,浏览器端通过jsessionid定位服务器端的session,session的 创建和销毁由服务器端控制。当浏览器关闭后,session还存在在服务器端,只不过你新开的浏览器去访问服务器会创建另一个session,这个时候的 jsessionid已经不一样了。也就不能访问上一次的哪个session里面的内容了。

     

    "session的创建和销毁由服务器端控制",服务器端才有session,客户端只是通过sessionid来匹配session.
    那服务器端session如何建的呢? 普通htm不会创建,jsp默认是创建的,只要你访问任何一个jsp就会创建(不过只创建一次),你关闭浏览器重新访问又会创建一个,这些创建的session由服务器自己控制销毁,你也可以在服务器端代码中销毁。
    什么情况下需要用上这种服务器端的session方式?
    默 认情况下,jsp被访问就会创建session(最开始是空的没有数据的),你的应用中的代码只是往session里面put数据。网上说可以 通过 <%@ page session="false"%>来不让jsp自动创session.我自己测试了一下(用sessionlistener),根本不起作用, session照样创建成功。
    最后说一下,只有服务器端才有session.客户端被存到本地的是cookie.不过安全性低。所以不能放重要的数据。

     

    ============================================================================

     

    sesion其实简单:
    先request.getsession(),当已有一个session与前request相关时就返回对这个 session的引用,当没有时就生成一个.一个session在server通过一个sessionid来标识的。也就是说在一个server是不会有 两个相同sessionid的session.

    那麼session为什麼会和cookie扯在一起呢?

    正如我所说对於一 个session来说它的sessionid就是其身份的标识。若我们将这个sessionid保存到用户端,当同一个会话的后序请求来时都将这个 sessionid放在request 的header中(也就是我们说的cookie)这样不就可以来验证这个request是否与之前的request是同一个会话了吗!

    什麼是会话呢?
    我 们可以通俗一点理解。只要你的browers不关我们就称这一系列的request与response为一个会话。一断你close就称这个会话已结束。 虽然会话结束但并不代表你的session就被destroy.因为session是存活在server上的。它的生命完全由server来主宰 (web.xml中的设定).
    虽然你的session还存活在server上但你已无法再取得它。因为j2ee的api只给我们一种方法来取得与当前会话相关的session的引用:request.getsession() or reqeust.getsession(boolean)
     =======================================================================

     

    一个常见的误解是以为session在有客户端访问时就被创建,然而事实是直到某server端程序调用HttpServletRequest.getSession(true)这样的语句时才被创建,
    注意如果JSP没有显示的使用 <%@page session="false"%> 关闭session,
    则JSP文件在编译成Servlet时将会自动加上这样一条语句HttpSession session = HttpServletRequest.getSession(true);

    这也是JSP中隐含的session对象的来历。


    <**********************有点矛盾的地方,到底JSP显示的使用《 %@page session="false"%》能不能让服务端不创建sessionid呢?试验下**************************>
    <%@ page session="false"%>
    不是不让页面创建Session,而是在此JSP页面无法使用session.可以减少网络数据传输.

    展开全文
  • android获取jsessionId和发送jsessionId
  • jsessionid是一个Cookie,可以通过在URL后面加上“;jsessionid=xxx”来传递“session id”;其中Servlet容器用来记录用户session,当我们创建回话时会自动创建,用来记录用户的访问记录。首先,JSESSIONID是一个...

    jsessionid是一个Cookie,可以通过在URL后面加上“;jsessionid=xxx”来传递“session id”;其中Servlet容器用来记录用户session,当我们创建回话时会自动创建,用来记录用户的访问记录。

    efe119420c69cd48c85fd83bdbd05fd8.png

    首先,JSESSIONID是一个Cookie,Servlet容器(tomcat,jetty)用来记录用户session。

    0bfd993e8192d4e0b7a03d6aacfcf8c2.png

    什么时候种下JSESSIONID

    创建会话时,即调用request.getSession()的时候,关于getSession就不说了。补充几点是,访问html是不会创建session的,JSP页面默认是会创建session的,可以在JSP页面里面关掉自动创建session.

    JSESSIONID工作原理:

    3f6d98ff970974cae5e6ac34be1c1147.png

    URL重写

    服务端在内存里创建session,需要种Cookie,除了在request header里面设置Set-Cookie以外,tomcat等容器有一个URL重写机制。这个机制是客户端Cookie不可用时的一个兜底策略,通过在URL后面加上;jsessionid=xxx来传递session id,这样即使Cookie不可用时,也可以保证session的可用性,但是session暴露在URL里,本身是不安全的,到这里基本网上说法都是一致的

    但是最关键的问题,tomcat怎么知道客户端Cookie不可用。我在idea导入tomcat的源码调试跟踪,不同版本有些出入,大致应该还是一样的

    tomcat有一个org.apache.catalina.connector.Response是Response的落地类,有两个方法会进行URL重写,分别是encodeRedirectURL和encodeURL,encodeRedirectURL是重定向时会被调用,encodeURL貌似是手动调用,所以默认情况,重定向时才会出现URL重写。两个方法代码类似,下面只关注encodeRedirectURL/**

    * Encode the session identifier associated with this response

    * into the specified redirect URL, if necessary.

    *

    * @param url URL to be encoded

    * @return true if the URL was encoded

    */

    @Override

    public String encodeRedirectURL(String url) {

    if (isEncodeable(toAbsolute(url))) {

    return (toEncoded(url, request.getSessionInternal().getIdInternal()));

    } else {

    return (url);

    }

    }

    方法注释写得很清楚了,如果有必要的话,把session id塞到重定向的URL里面。再看一下isEncodeable方法,关键地方我加了中文注释/**

    * Return true if the specified URL should be encoded with

    * a session identifier. This will be true if all of the following

    * conditions are met:

    *

    *

    The request we are responding to asked for a valid session

    *

    The requested session ID was not received via a cookie

    *

    The specified URL points back to somewhere within the web

    * application that is responding to this request

    *

    *

    * @param location Absolute URL to be validated

    * @return true if the URL should be encoded

    */

    protected boolean isEncodeable(final String location) {

    if (location == null) {

    return false;

    }

    // Is this an intra-document reference?

    if (location.startsWith("#")) {

    return false;

    }

    // Are we in a valid session that is not using cookies?

    final Request hreq = request;

    final Session session = hreq.getSessionInternal(false);

    if (session == null) {

    return false;

    }

    //这里其实就是网上说的客户端禁用Cookie

    if (hreq.isRequestedSessionIdFromCookie()) {

    return false;

    }

    // Is URL encoding permitted

    // servlet3.0后可以在项目web.xml里关掉URL重写,对应tomat7之后

    if (!hreq.getServletContext().getEffectiveSessionTrackingModes().

    contains(SessionTrackingMode.URL)) {

    return false;

    }

    if (SecurityUtil.isPackageProtectionEnabled()) {

    return (

    AccessController.doPrivileged(new PrivilegedAction() {

    @Override

    public Boolean run(){

    return Boolean.valueOf(doIsEncodeable(hreq, session, location));

    }

    })).booleanValue();

    } else {

    //这个方法会重写URL

    return doIsEncodeable(hreq, session, location);

    }

    }

    其中调用Request对象的isRequestedSessionIdFromCookie判断客户端Cookie是否可用,里面逻辑也很简单,就是读取request里面有没有传JSESSIONID这个Cookie。所以网上有些人说第一次访问,其实只要客户端没有传JSESSIONID,tomcat都假定Cookie不可用

    展开全文
  • JSESSIONID理解

    2019-11-18 17:55:44
    JSESSIONID理解   平常写项目的时候大家都会用到的session对象来存储一些的用户的信息。但是我们都知道session对象其实是存储到服务器端的。那我们客户端如何和服务器端联系呢。其实他们之间的联系是通过的 ...
  • JSESSIONID 作用

    2019-02-22 10:02:24
    1)第一次访问服务器的时候,会在...上图中JSESSIONID=ghco9xdnaco31gmafukxchph;Path=/acr,首次访问服务器时服务端创建session,HttpSession session = request.getSession(); 当这句代码需要创建session的时候,...
  • jsessionid原理

    2021-06-18 10:49:31
    上面的图JSESSIONID=ghco9xdnaco31gmafukxchph;Path=/acr, 浏览器会根据响应头的set-cookie信息设置浏览器的cookie并保存之 注意此cookie由于没有设置cookie有效日期,所以在关闭浏览器的情况下会丢失掉这个cookie...
  • jsessionid的简单说明

    万次阅读 多人点赞 2014-04-11 17:41:50
    上面的图JSESSIONID=ghco9xdnaco31gmafukxchph;Path=/acr, 浏览器会根据响应头的set-cookie信息设置浏览器的cookie并保存之 注意此cookie由于没有设置cookie有效日期,所以在关闭浏览器的情况下会丢失...
  • jsessionid机制

    千次阅读 2015-05-20 16:50:51
    那么就需要一个东西来标志这个内存区间是你的而不是别人的,这个东西就是session id(jsessionid只是tomcat中对session id的叫法,在其它容器里面,不一定就是叫jsessionid了。),而这个内存区间你可以理解为se
  • jsessionid说明

    2018-09-26 14:34:00
    1、第一次访问服务器的时候,会在响应头里面看到Set-Cookie信息(只有在首次访问服务器的时候才会在响应头中出现该信息) ...jsessionid就是用来判断当前用户对应于哪个session。换句话说服务器识别se...
  • JSESSIONID的简单说明

    万次阅读 多人点赞 2017-11-22 11:14:58
    1)第一次访问服务器的时候,会在响应头里面看到Set-Cookie信息(只有在首次访问服务器的时候才会在响应头中出现该信息) ...上面的图JSESSIONID=ghco9xdnaco31gmafukxchph;Path=/acr, 浏览器会根据响应
  • 后端获取JSESSIONID

    2020-07-12 16:07:38
    @ApiOperation(value = "获取JSESSIONID") @GetMapping("/get_jsessionId.do") public String getJsessionId(HttpSession session){ String sessionId = session.getId(); return sessionId; }
  • 删除jsessionid

    千次阅读 2013-12-31 15:14:26
    原创地址:https://randomcoder.org/articles/jsessionid-considered-harmful
  • 爬虫 JSESSIONID 问题

    2018-05-30 06:47:53
    写爬虫时碰到问题,cookie里需要 JSESSIONID 这个参数,怎么能自动获取到呢,省的手动复制粘贴
  • jsessionid用途

    2017-07-07 11:37:46
    jsessionid=xxxxxxxxxx?a=x&b=x…。 这跟一般的url基本一样,只有一个地方有区别,那就是“;jessionid=xxxxxxxx”。这个参数有时候有,有时候又没有,说它是参数可又跟一般传递的参数不同,它是紧跟在url后面用...
  • jsessionId的使用

    千次阅读 2018-11-06 19:19:59
    jsessionid的作用  在web应用的开发中我们会经常看到这样的url:http://www.xxx.com/xxx_app;jsessionid=xxxxxxxxxx?a=x&amp;b=x...。这跟一般的url基本一样,只有一个地方有区别,那就是“;jessionid=...
  • jsessionid的删除

    千次阅读 2019-05-10 16:06:15
    jsessionid所引起的问题 在Spring MVC当使用RedirectView或者"redirect:"前缀来做重定向时,Spring MVC最后会调用: response.sendRedirect(response.encodeRedirectURL(url)); 对于IE来说,打开一个新的浏览器窗口...
  • JsessionId简介与过滤

    2019-02-01 23:59:11
    一、JsessionId jsessionid是标识session的,它保存在cookie中。一般情况下不会出现在url中,服务器会从客户端的cookie中取出来。 但是如果客户端禁用了cookie的话,就要重写url了,显式的将jsessionid重写到Url中...
  • I login into a tomcat instance at mywebsite1.web.... I need to make an AJAX POST call to mywebsite1.web.com/user_activity. What I understand is that the JSESSIONID for mywebsite1.web....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 41,235
精华内容 16,494
关键字:

jsessionid