什么是Java会话?

14 java session servlets dwr

到目前为止,我理解Java中的Httpsession概念.

 HttpSession ses = req.getSession(true);
Run Code Online (Sandbox Code Playgroud)

将根据请求创建会话对象.

setAttribute("String", object);
Run Code Online (Sandbox Code Playgroud)

将使用Session对象绑定'String'和value.

getAttribute("String");
Run Code Online (Sandbox Code Playgroud)

将返回与指定的字符串关联的对象.

我无法理解的是:我正在创建一个会话对象 HttpSession ses = req.getSession(true); ,并通过调用为其设置名称setAttribute("String", object);.这里,此代码驻留在服务器内部.对于每个人,当他尝试登录服务器中的相同代码时将被执行.setAttribute("String", object);在此方法中,字符串值是常量.因此,创建的每个会话对象都将使用我提供的相同字符串进行绑定.当我尝试检索字符串以验证他的会话或在采取注销操作时,getAttribute("String"); ll返回相同的常量字符串值(我是对的!! ??实际上我不知道,我只是想到它的执行逻辑) .然后,我怎么能够无效.

我在WEB上的所有教程中都看到了这种类型的插图.它是设置该属性的实际方法吗?或者,真正的应用程序开发人员将在"String"字段中给出一个变量来动态设置它

(ie. session.setAttribut(userName, userName); //Setting the String Dynamically.. I dono is it right or not.)

我的最后一个问题是

WebContext ctx = WebContextFactory.get();
request = ctx.getHttpServletRequest();
Run Code Online (Sandbox Code Playgroud)

上面两行做什么?什么将存储在ctx和请求中? HttpSession ses = req.getSession(true);将创建新的会话手段.存储在ses中的值.

gaw*_*awi 19

一些[随机]精度:

  1. 您不需要登录/注销机制来进行会话.
  2. 在java servlet中,使用两种机制跟踪HTTP会话,HTTP cookie(最常用)或URL重写(以支持没有cookie或禁用cookie的浏览器).仅使用cookie很简单,您不必做任何特殊的事情.对于URL重写,您需要修改指向servlet /过滤器的所有URL.
  3. 每次调用时request.getSession(true),HttpRequest都会检查对象,以便找到在URL路径参数中的cookie OR/AND中编码的会话ID(分号后面是什么).如果找不到会话ID,servlet容器(即服务器)将创建一个新会话.
  4. 会话ID作为Cookie添加到响应中.如果您还想支持URL重写,则应使用该response.encodeURL()方法修改HTML文档中的链接.如果未找到会话ID或会话ID引用无效会话,则调用request.getSession(false)或仅request.getSession()返回null.
  5. 访问时只有一个HTTP会话,因为Java会话cookie不会永久存储在浏览器中.因此,客户端之间不会共享会话对象.每个用户都有自己的私人会话.
  6. 如果在给定时间内未使用会话,则会自动销毁会话.可以在web.xml文件中配置超时值.
  7. 可以使用该invalidate()方法显式地使给定会话无效.
  8. 当人们谈论时JSESSIONID,他们指的是用于在Java中进行会话跟踪的HTTP cookie的标准名称.


Kal*_*see 13

我建议你阅读有关Java会话的教程.每个用户都有不同的HttpSession对象,基于所述的Java Web服务器向浏览器JSESSIONID请求/响应参数.因此,每个用户都可以拥有一个具有相同名称的属性,并且为该属性存储的值对于所有用户将是不同的.

此外,WebContextFactory和WebContext是DWR类,它们提供了获取servlet参数的简便方法.

  • 您是否看过这些类的javadoc?HttpServletRequest:http://download.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html,WebContextFactory:http://www.jarvana.com/jarvana/view/org/directwebremoting/dwr/ 2.0.3/dwr-2.0.3-javadoc.jar!/org/directwebremoting/WebContextFactory.html和WebContext:http://www.jarvana.com/jarvana/view/org/directwebremoting/dwr/2.0.3/ DWR-2.0.3-javadoc.jar!/org/directwebremoting/WebContext.html (2认同)

luc*_*001 9

据我了解,您关注的是在HttpSession中存储内容时不同用户的分离.

servlet容器(例如Tomcat)利用其JSESSIONID来处理这个问题.

故事是这样的:

  1. 用户首先登录网站.
  2. Servlet容器在用户的浏览器上设置COOKIE,存储UNIQUE jsessionId.
  3. 每次用户访问网站时,都会发回JSESSIONID cookie.
  4. servlet容器使用它来跟踪谁是谁.
  5. 同样,这也是它跟踪数据分离的方式.每个用户都有自己的JSESSIONID唯一标识的对象桶.

希望(至少部分)回答你的问题.

干杯

  • @All:我的问题的每一个答案,一字一句地清除我的怀疑.这就是为什么,我喜欢stackOverflow.谢谢大家. (2认同)