首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >会话在Java中是什么?

会话在Java中是什么?
EN

Stack Overflow用户
提问于 2010-09-08 21:23:10
回答 4查看 87.4K关注 0票数 16

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

代码语言:javascript
复制
 HttpSession ses = req.getSession(true);

将根据请求创建一个会话对象。

代码语言:javascript
复制
setAttribute("String", object);

将“字符串”和值与会话对象绑定在一起。

代码语言:javascript
复制
getAttribute("String");

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

我不能理解的是:我创建了一个类似HttpSession ses = req.getSession(true);的会话对象,并通过调用setAttribute("String", object);为它设置了一个名称。在这里,这段代码驻留在服务器内部。对于每个人,当他尝试登录时,服务器中的相同代码将被执行。setAttribute("String", object);在此方法中,字符串值为常量。因此,创建的每个会话对象都将由我提供的相同字符串绑定。当我尝试检索字符串以验证他的会话或执行注销操作时,getAttribute("String");将返回相同的常量字符串值(我说的对吗!!??实际上我不知道,我只是在考虑它的执行逻辑)。那么,我如何才能使。

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

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

我的最后一个问题是

代码语言:javascript
复制
WebContext ctx = WebContextFactory.get();
request = ctx.getHttpServletRequest();

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-09-08 22:04:34

一些随机精度:

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

Stack Overflow用户

发布于 2010-09-08 21:32:16

我建议你阅读一篇关于Java会话的tutorial。根据Java web服务器发送给浏览器的JSESSIONID请求/响应参数,每个用户都会得到一个不同的HttpSession对象。因此,每个用户都可以有一个具有相同名称的属性,并且为该属性存储的值对于所有用户都是不同的。

此外,WebContextFactory和WebContext都是DWR类,它们提供了一种获取servlet参数的简单方法。

票数 13
EN

Stack Overflow用户

发布于 2010-09-08 21:38:00

据我所知,您关心的是在HttpSession中存储内容时不同用户的分离。

servlet容器(例如Tomcat)利用它的JSESSIONID来处理这个问题。

故事是这样的:

servlet user first logs on website.

  • Servlet container在用户的浏览器上设置一个COOKIE,存储用户访问网站时的唯一会话it。

  • servlet容器使用它来跟踪谁是谁。

  • 同样,这是它跟踪数据分离的方式。每个用户都有自己的对象桶,这些对象由JSESSIONID唯一标识。

希望这(至少部分)回答了你的问题。

干杯

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3668153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档