问题标签 [session-management]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
7022 浏览

spring-security - 使用 Spring Security 的会话管理:并发会话

我已经使用 Spring Security 开发了一个 Web 应用程序。对于登录,它从 LDAP 获得访问权限。现在我想使用 spring security 本身来管理会话,我可以看到通过使用authentication.getName()I am getting theusername并且我还可以获得sessionID.

现在我想确定如果同一个用户尝试使用其他浏览器从同一个系统登录,他应该收到一条消息,说他已经登录了他的帐户。

谁能给出一个想法如何实现这一目标????

当我使用它并尝试使用其他浏览器登录时,它给了我以下错误:

0 投票
1 回答
1539 浏览

nhibernate - 如何使用 LifestyleScoped 实现 Castle Windsor IScopeAccessor 以提供每个 ViewModel 的 NHibernate 会话

我正在寻找一些帮助来创建 IScopeAccessor 的实现,或者寻找一个新的解决方案,这将允许我为每个 ViewModel 提供一个 NHibernate 会话。

我知道温莎现在支持所见的范围生活方式(这里)。但是,该示例使用 using 块创建特殊范围并在 using 中调用 container.resolve。

我想不出一种方法来完成这项工作,因为我不想传递容器,并且我希望范围与创建的 ViewModel 相关联,这将在需要时动态发生。

作为替代方案,看起来我可以创建 IScopeAccessor 的实现,根据 Krzysztof Koźmic (此处)将允许我

“......提供你喜欢的任何范围。范围在这里是一个抽象术语,它可以是任何东西。”

不幸的是,我找不到不特定于基于 Web 的场景的 IScopeAccessor 的实现,我正在努力理解我需要做什么才能将“任何东西”变成有效的范围。

我找到了一个我想使用 Ninject 做什么的例子(http://www.emidee.net/index.php/2010/08/23/ninject-use-one-database-session-per-view-model /):

在 Ninject 中,InScope 表示只要回调返回的对象保持活动状态,就应该重用由绑定创建的任何实例。本质上,此回调返回根级 ViewModel(因为 ViewModel 可以嵌套)。

关于如何使用 Windsor 做同样的事情或获得同样的结果有什么想法吗?

0 投票
1 回答
384 浏览

node.js - express-session-mongo 与自己滚动的优势

我是 nodejs/mongo 的新手,所以我最终推出了自己的会话中间件,因为我不知道express-session-mongo

在我的中间件中,我将用户 ID 存储在会话中(通过 express 的会话中间件),然后在每个请求上加载登录的用户对象。我还允许用户将他们的用户/通行证存储在 httpOnly cookie 中以实现“记住我”功能。

该 npm 的文档页面有一些不足之处。

我的问题是:该模块与我写的相比有什么优势?我在做傻事吗?他们做的比我做的好在哪里?

0 投票
2 回答
8181 浏览

python - 用于会话管理的 Python 模块

是否有任何等效的会话管理模块,例如 Perl 的 CGI::Session 或 Apache::Session ?(我知道大多数 python web 框架都有自己的实现,但我正在寻找一个可以与任何 python 应用程序一起使用的独立模块。)

0 投票
0 回答
1543 浏览

netty - Netty 在握手时或握手期间自定义唯一通道 ID

我已经使用客户端/服务器聊天示例来实现我的SSL要求。我要求的主要部分是session management.

我想要:

  • 创建SSLTLS)从我的客户端到服务器的“隧道”
  • ( SSL tunnel)channel只有在满足特定要求时才会打开并可用。否则,通道和连接将立即关闭。
  • 检查是否满足要求。计划是,客户端向ID服务器发送一个。例如,将使用、、、等ID组装。这可以用作和 作为,以便服务器可以定位/跟踪/识别用户。client-PC-IDUsernameIP-AddressTimestampIDchannel IDClient-Sesion-ID

创建SSL连接时,一旦创建配置,我正在执行该handshake()方法。然后创建连接并使用随机Integer数作为Channel-ID. 所以,在服务器端,我有ID客户端的 s 并且可以向他们发送消息。但是,我想拥有自己独特ID的 s,我也可以将其用作session IDs。最重要的是,客户将创建这些IDs 并使用它们“登录”。所以我想在服务器端决定 - 使用ID客户端创建的 - 如果TLS tunnelchannel)将打开(logged-in)或不(no-access-to-log-in)。ID这需要客户端在期间发送自己创建的唯一性handshake,不是吗?

一旦客户端发送了一个 valid ID,服务器应该检查它SSL-Certificate是否有效,等等。但这是下一步。

所以,问题是,我如何使用ID客户发送的?或者这是不可能的?或者它可能不需要?或者也许它没有任何意义?

有什么想法吗?

0 投票
1 回答
179 浏览

nhibernate - 非常高流量的 Web 应用程序中的 Nhibernate 会话处理

我正在构建一个需要每分钟处理 1000 个请求的小型 Web 应用程序。
每个请求都需要向数据库写入一个简单的行。
我正在为阅读做二级缓存。
在这种情况下,我可以按请求进行会话吗?我应该重用会话吗?这种情况的最佳做法是什么?
它将用 C#、SQL SERVER 2008、ASP.NET 通用处理程序编写。
谢谢

0 投票
1 回答
5687 浏览

c# - 每个请求的会话 MVC 应用程序的 NHibernate 问题

我编写了一个使用 NHibernate 作为 ORM 的 C# MVC 3,并且在大多数页面加载时都抛出了一些奇怪的异常。它们似乎主要与封闭会话等有关,我已经检查了大多数常见问题,但发现几乎没有帮助。一些例外情况包括:

我为异常之墙道歉,我怀疑它们是相关的,但代码中可能存在另一个错误,也可能导致一两个错误。我不喜欢对这些东西使用随机这个词,但我似乎无法追踪调用它们的任何特定代码行,它们似乎只是出现在与 ISession 对象相关的代码行中。我什至在 Global.asax 文件中的 BeginTranscation 方法上抛出了“会话已关闭”异常。

应用程序使用 hibernate.cfg.xml 中 current_session_context_class 的 web 选项。

我怀疑它与我的会话管理代码有关。该网站通常会同时加载大约 10 个 AJAX 请求,当同时加载多个页面时,错误似乎更频繁地发生。有两个会话工厂,一个用于每个正在使用的数据库。

这是我相关的 Global.asax 代码:

我查看了 NHibernate profiler 中运行的页面。有时会话不是以 BeginTranscation 开始的,有时它们不是 Committed,有时两者都不是;最令人费解的是,有时它们启动了三遍,但没有完成。

对 ISession 对象的任何调用都通过此代码进行管理(每个工厂都有一个):

在整个应用程序中没有对 BeginTransaction 或 Commit 的调用,除非它们被刷新、提交、会话处理,然后按照上面的代码重新打开。你们能对此有所了解的任何线索将不胜感激!

0 投票
2 回答
10692 浏览

spring-mvc - Spring Security 中的会话管理

我是 Spring Security 的新手。我需要进行基于 URL 的身份验证,其中用户需要根据每次作为 URL 中的参数发送的唯一引用进行身份验证。我会将这个引用传递给 Web 服务,获取所需的数据,然后对用户进行身份验证(并设置角色)。身份验证和授权部分工作正常。

但是,当我尝试再次访问应用程序(现在在 URL 中使用不同的引用)时,它显示“SecurityContextHolder 未填充匿名令牌,因为它已经包含......”并且它显示了先前请求的详细信息。我尝试使用 SecurityContextHolder.getContext().setAuthentication(null) 和 SecurityContextHolder.clearContext() 清除安全上下文。

在此之后,我能够多次访问该应用程序。但是,如果我尝试从同事的机器上同时访问该应用程序,我会得到一个空白页。检查日志后,我看到一条消息“SecurityContextHolder 未填充匿名令牌......”。我也尝试过设置会话,但我不知道我在哪里丢失了轨道。

下面是我的 web.xml(只有 spring 安全部分):

弹簧安全.xml:

如果我需要提供更多信息,请告诉我。

编辑:添加日志。

对于第一个请求:

2013-02-07 17:27:38,834 调试 [http-8081-2][org.springframework.security.web.context.HttpSessionSecurityContextRepository.readSecurityContextFromSession(127)] - 当前不存在 HttpSession 2013-02-07 17:27: 38,834 调试 [http-8081-2][org.springframework.security.web.context.HttpSessionSecurityContextRepository.loadContext(85)] - HttpSession 中没有可用的 SecurityContext:null。将创建一个新的。

对于第二个请求(请注意,安全上下文中的详细信息是第一个请求的详细信息):

2013-02-07 17:27:54,272 调试 [http-8081-2][org.springframework.security.web.context.HttpSessionSecurityContextRepository.readSecurityContextFromSession(158)] - 从 SPRING_SECURITY_CONTEXT: 'org.springframework.security .core.context.SecurityContextImpl@1017293c:身份验证:org.springframework.security.web.authentication.preauth.PreAuthenticatedAuthenticationToken@1017293c:主体:org.springframework.security.core.userdetails.User@35cd3811:用户名:Internal@5581e6e1-7e61 -41bb-9257-b3c1acb96519;密码保护]; 启用:真;AccountNonExpired:真;凭据非过期:真;AccountNonLocked:真;授予权限:内部;凭证:[受保护];已认证:真实;详细信息:org.springframework.security.web.authentication.WebAuthenticationDetails@ffffc434:RemoteIpAddress:10.188。182.107;会话ID:空;授予权限:内部'

我的理解是安全上下文持有者存储所有用户的详细信息。但在这种情况下,我无法从不同的选项卡/浏览器启动应用程序。

0 投票
1 回答
311 浏览

php - 销毁和 session_start() 后无法处理 $_SESSION 数组

$_SESSION用来存储来自多页表单的数据。一切都很顺利,直到我完成提交并结束会话以防止在该人尝试重新输入表单时复制相同的表单数据。表单完成并提交后,终止会话并擦除会话数据:

接下来是这样的:

我已经确认正在建立一个新的会话 cookie,但在重新启动会话$_POST$_SESSION它是空的。通过最近的修复(谢谢!)我可以以编程方式将数据推送到 $_POST 和 $_SESION 数组中(例如 $_POST['foo'] = 'bar';),但通过 URI 传递的变量会被忽略。


解决方案:

重新 session_destroy,请参阅 Alex B 的答案。

回覆。$_POST 问题 - 事实证明,当直接通过 URL 输入信息时,服务器将其(正确)解释为 GET 而不是 POST。我修改了我的代码以获取所有 GET 和 POST 数据,但在生产中只需要 POST。这是新代码:

0 投票
1 回答
441 浏览

php - 用户代理更改后 PHP 会话被销毁

我有这样的地址example.com/page1。例如访问者的用户代理是这样的:Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_2 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10B146. 我运行session_id()PHP 会话 ID 为 12345。我可以在临时文件夹中看到“sess_12345”文件。它包含所有会话变量。

经过一些处理后,我将他/她重定向到example.com/page2. 访问者的用户代理更改为:Mozilla/5.0 (iPhone; CPU iPhone OS 6_1_2 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Mobile/10B146 Twitter for iPhone。我session_id()再次运行,发现ID仍然是12345。但是当我检查“sess_12345”文件时,我看到它被删除了。

只有当用户从“Twitter for iPhone”应用程序访问我的网站时才会发生这种情况。我猜会话文件由于用户代理更改而被删除,但我不确定。可能是什么原因?

(除了这种情况,会话成功。我使用的是 CakePHP 2.4)