Java 中的会话是什么?

2022-09-03 03:41:12

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

 HttpSession ses = req.getSession(true);

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

setAttribute("String", object);

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

getAttribute("String");

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

我无法理解的是:我正在创建一个会话对象,并通过调用来为其设置名称。此处,此代码位于服务器内部。对于每个人,当他尝试登录时,将执行服务器中的相同代码。 在此方法中,字符串值是常量值。因此,创建的每个会话对象都将由我提供的相同字符串绑定。当我尝试检索字符串以验证其会话或执行注销操作时,ll将返回相同的常量字符串值(我是对的吗!!??其实我不知道,我只是在想它的执行逻辑)。那么,我怎么能使无效。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.)

我的最后一个问题是

WebContext ctx = WebContextFactory.get();
request = ctx.getHttpServletRequest();

上面的两行有什么作用?ctx & request中将存储什么? 将创建新的会话均值。ses 中存储了什么值。HttpSession ses = req.getSession(true);


答案 1

一些[随机]精度:

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

答案 2

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

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