问题标签 [session-state]
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.
asp.net - 代码可重用性 - App_Code 或 BIN 或 UserControls?
我最近在另一个论坛上与另一个开发人员进行了讨论,主题是 ASP.NET 中的代码重用。所述场景是他需要在服务器正常运行期间频繁更新生产服务器上的代码,这会导致所有用户的 Session 被重置。他避免将共享代码或类放入 App_Code 文件夹或将预编译的 DLL 放入 Bin 文件夹,因为任何更新也会刷新会话。
他提出的解决方案是将他的共享代码放入 UserControls 并在需要的地方引用它们。这使他能够仅更新将在下一次请求时动态重新编译的 UserControl 文件,而无需强制重新启动会话。请注意,用户控件不打算有任何 UI,它们可能只包含一些业务逻辑。
我试图说服他不要这样做,因为这对我来说本质上是错误的——但我无法提供任何确凿的事实来支持我的说法,即这是一种非常糟糕的做事方式。我唯一能想到的是它违反了业务逻辑与UI分离的原则。我是大错特错还是有具体的理由不应该这样做?链接或示例会有所帮助。
注意:目前不能选择使用进程外会话状态,他们也无法决定计划的停机时间。此外,由于这是一个正在积极开发的站点,他们似乎还没有使用任何专业的部署模型。
提前致谢。
编辑:此外,如果有人能准确地阐明会话在上述情况下重新启动的原因,那将会很有帮助。
session - 当多个浏览器窗口共享同一个会话时,如何最好地处理用户状态?
我有一个 Web 应用程序(Java、Websphere、JSP),它允许同事注册各种公司展览的访客。用户对象存储在记录当前选择的展览的会话中,并在输入新访客的详细信息时使用。
一位用户决定打开第二个浏览器窗口,该窗口似乎共享同一个会话。用户在第二个窗口中浏览到另一个展览。这会改变当前选定展览的状态。回到第一个窗口,单击一个菜单项:“列出访问者”。结果列表是在第二个窗口中选择的展览参观者列表。
我知道我可以将展览 ID 添加到每个页面上的每个表单,但我的实际场景比我描述的更复杂。
您处理此类问题的策略是什么?
asp.net - ASP.Net 状态服务的问题
我们有一个在网络场中运行的 ASP.Net 2.0 Web 应用程序,它使用 ASP.Net State 服务来存储会话。
我们一直在间歇性地遇到服务问题,并更改了一些内容,例如 machine.config 中的 machineKey。
我的实际问题是围绕状态服务服务的监控。我们在托管服务的服务器上运行了所有 4 个可用的性能计数器,但到目前为止我们还没有看到单个会话超时。我们还看到活跃会话的数量在一段时间内缓慢上升,但从未减少。
状态服务是否能识别会话何时超时?有什么我们应该手动做的吗?
编辑:我们已经放弃了状态服务并使用了 SQL 服务器会话。
为了回答下面的问题,似乎会话永远上升,直到服务崩溃,并且任何 oen 线程都链接到状态服务器是非常值得怀疑的。归根结底,这是一个相当基本的网络应用程序。
从我正在阅读的内容看来,其他许多人都经历过类似的事情,但是在任何飞来飞去的反应中似乎普遍缺乏常识和知识。
MS 似乎几乎没有关于这个主题的文档。
asp.net - sql会话超时建议
我的一个应用程序使用 sql 会话状态,超时当前设置为 20 分钟。我的问题是,由于它存储在数据库中而不是服务器内存中,我应该能够增加超时而不会出现任何重大的性能问题,对吗?
我不太了解超时对于数据库会话状态场景的重要性,因为数据库应该能够轻松处理大量会话。
asp.net - ASP.NET Session ID 可以同时在两台机器上相同吗?
我有一个 ASP.NET 应用程序,它使用 Session.SessionID 来防止多个用户同时查看相同的数据。
我有一个表,其中包含一组需要处理的图像(存储在 BLOB 中)。应该只有一个用户能够同时查看相同的图像。为了实现这一点,当用户检索每条记录时,记录会使用 Session.SessionID 进行更新。此更新发生在 ReaderWriterLock 内。
我已经进行了测试以确保 ReaderWriterLock 正常工作,并且可以确认只有一个会话可以一次执行该块内的代码。
我目前的理论是两个不同的用户同时获得相同的 SessionID。此应用程序的用户可以查看他们已锁定的记录或任何未锁定的图像。
我已经修改了应用程序以在每个页面的页脚中显示 SessionID,以便如果问题再次发生,我可以检查 SessionID 值。
我在网上看到一些文章暗示 SessionID 不是唯一的,也有人说 SessionID 是唯一的。我知道 SessionID 不是永远唯一的,但是 SessionID 值对于活动会话可以被认为是唯一的吗?
我还阅读了一些建议,即应该将 Guid 存储在 Session 对象中并用作唯一 ID 而不是 Session ID。
感谢您到目前为止的回复。这是基于迄今为止的答案的澄清:
“永远锁定” - 我们通过 5 分钟的锁定超时来防止这种情况。在用户锁定图像之前,在 ReaderWriterLock 内部,我们会“清理”旧锁(解锁锁定超过 5 分钟的图像),查询以获取最旧的解锁图像,并使用更新语句“锁定”该图像图像到当前会话。
问题的一个可能原因是,如果一个用户“锁定”了一张图像,但随后离开 PC 短暂休息。如果他们在 5 分钟内什么都不做,则屏幕上的图像将被解锁并可能被另一个用户打开。我在报告问题时提到了这种情况,我确信用户一直在持续工作。
“不同的窗口/选项卡” - 我实际上并没有亲眼看到错误,但报告问题的人告诉我,这是两台不同的 PC 和登录用户的两个不同用户名。
希望现在我在页面上显示会话 ID,下次发生这种情况时,我将能够肯定地说两台机器上的会话 ID 是否相同,或者是否是其他问题。此问题在测试阶段从未发生过,因此它似乎是大量并发用户的症状。
感谢您到目前为止的回复,随着更多信息的到来,我会更新这个问题。
似乎用户没有给我完整的故事。根据接受的答案,在我们的案例中,会话 ID 是唯一的。两个用户能够同时看到相同的图像,因为用户 1 在 5 分钟的“废弃图像”解锁过程中处于空闲状态。已提高“废弃图像”超时以匹配会话超时以避免此问题。
c# - 使用 c# 检查工作站锁定/解锁更改
当 Windows 用户锁定屏幕 (Windows+L) 并再次解锁时,如何检测(在运行时)。我知道我可以全局跟踪键盘输入,但是可以用环境变量检查这样的事情吗?
.net - 在两个 .net 应用程序之间共享“会话状态”类型数据的最佳方式
我们有一个 Web 应用程序,开始时很小,添加的任何新功能都只是作为同一个项目的一部分,但是现在我们想为这些插件创建新项目......
我们创建了一个新项目,它继承了主项目的 global.asax,并且还可以访问主项目的 web.config,但是,在全局 asax 代码中有会话检查数据完整性,以查看用户是否已登录..这是我们遇到问题的地方..用户已登录,但站点错误指出他们未登录,因为插件项目无法访问由主项目设置的会话用户 ID。
目前我们没有使用会话状态服务器或 sql 状态服务器,我们希望避免使用它以避免对一些旧代码造成任何麻烦。
我们也不想走互斥锁的路线..如果可以的话,我们也想远离 Windows 编码......
会话发生的情况的站点概述:用户使用 asp 代码(.net 1.1 代码)登录 用户经过身份验证并成功登录,将该用户的 guid 发送到数据库,主项目(.net 2.0 代码)抓住它guid,获取用户数据并将用户 ID 存储在会话中。任何需要知道用户是谁的页面,都从 session("userid")
所以:我们创建另一个继承 global.asax 的项目,可以访问 web.config - 完成!
我们想要在此之上做的:让这个新项目包含一个页面(来自主项目的插件功能)让这个页面访问从主项目设置的会话(“userid”)。- 不知道该怎么做...
asp.net - 如果访问 SessionID,是否会重置 ASP.Net Inproc 会话超时?
我在这里读到,每次访问(读取或写入)时,inproc asp.net 会话都会重置它的超时。我的问题是,如果我只读取 sessionID,是否也会重置超时?
示例:会话超时设置为 20 分钟。15分钟后。我加载一个页面并读取 Session.SessionID。再过 10 分钟,会话还会存在吗?
还有一个问题:页面是直接加载还是通过 AJAX 访问有关系吗?
.net - 需要如何在同一域上运行的两个 .net 2.0 Web 应用程序之间共享“会话”数据的工作示例
我想要一个使用asp.net会话状态服务器的工作示例,在两个运行在同一域上的.net 2.0 Web应用程序之间共享会话变量,只是在不同的文件夹(同一个父文件夹)中
目录结构:
父站点:[localhost/testSite] Web 应用程序 1 站点:[localhost/testSite/webapp1] Web 应用程序 2 站点:[localhost/testSite/webapp2]
Web 应用 1 站点设置 Session 变量(“myVarImSetting”) Web 应用 2 站点获取 Session 变量(“myVarImSetting”)
项目编译完成后,首先运行 web app 1,设置变量,然后在它仍然打开的情况下,浏览到 web app 2 页面,并显示存储在 Session(myVarImSetting") 中的值
这应该可行,应该有一种方法可以做到这一点,我告诉有,但没有人提供任何证据,以及使用 asp.net 状态服务器的 .net 2.0 框架的工作演示。
.net - .net HttpCookie 类/会话 cookie 问题
我对如何将常规HttpCookie
对象制作成在会话结束时过期的 cookie 很感兴趣。我对某人不感兴趣showing me HttpContext.Session
。与普通 cookie 相比,会话 cookie 在响应标头中的外观如何?如何修改 aHttpCookie
以在会话结束时过期?谢谢!