问题标签 [sql-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.

0 投票
1 回答
1234 浏览

asp.net - SQL Server 会话状态持久性如何工作?

我不喜欢使用 ASP.NET 会话状态,但我们的应用程序此时正在使用它。我们使用 SQL Server 模式来保持会话状态。我正在考虑在会话状态下缓存授权检查结果,但我担心这种方法的性能。SQL Server 会话状态持久性在 .NET 中究竟是如何工作的?

据我所知,所有会话数据都存储在一个数据库行中,而数据本身存储在一列中。我担心的是,如果我们的应用程序在一个请求中执行 12 次不同的授权检查,并且每个结果在收到后立即存储,那么在存储这些项目时将发出 12 个不同的数据库请求,这将使我的任何网络请求减少无效试图完成。

每个会话状态突变是否伴随着一个同步数据库请求,或者所有会话状态更改是否在 ASP.NET 请求生命周期中一次持续存在?

0 投票
3 回答
11953 浏览

asp.net - 使用 ASP.NET/SQL Server 丢失会话状态

我有一个 ASP.NET MVC 工作流配置为由负载均衡器管理的两个网站。网站使用 Sql Server 作为会话状态提供程序并关闭身份验证(不需要)。

现在,我似乎偶尔会丢失会话状态,我相信这是因为请求正在由备用服务器处理,所以基本上用户正在从服务器跳转到服务器,这取决于负载均衡器认为合适的方式。我并不总是在工作流的同一阶段“丢失会话状态”,所以我相信这与网络场配置 + sql server 会话状态有关。

两个应用程序使用相同的机器密钥来加密和解密存储在 sql server 中的会话状态。

两台服务器上的配置如下:

我已经确认这在两台服务器上都是相同的,有什么我遗漏的吗?

当我使用单个服务器时,这不会发生在我的开发环境中。

我担心我正遭受周五忧郁症的折磨,毫无疑问下周会找出答案,可悲的是我不想等待!

有任何想法吗?

0 投票
1 回答
2589 浏览

sql - 如何在 SQL Server 中以分钟为单位获取会话长度

在我的过程中使用以下查询,我可以数到连接到我的数据库

这工作正常,有没有办法在几分钟内获得每个连接/会话的长度?

0 投票
1 回答
2049 浏览

asp.net-mvc-3 - 隐藏 ASP.NET_SessionId Cookie

我编写了一个 ASP.Net MVC 应用程序,将会话信息存储在数据库中,但我可以看到会话 ID 存储在浏览器 cookie“ASP.NET_SessionId”中。这是安全风险吗?id 可以用来破解/窃取用户的会话吗?

0 投票
1 回答
98 浏览

asp.net-mvc - 使用奇怪的路径值渲染的链接

我在我们的日志中看到过几次,用户也向我们报告过,但从未真正了解问题的根源。

有时,页面将从输出缓存中呈现,其中的链接具有奇怪的路径值。比如说(X(3)S(5l53uwuaffkddojv4iwb3snm))。这可能是因为页面的第一次渲染有这些链接,因此它们与它们一起缓存。

这意味着该页面上的所有 url 看起来都与此类似。

http://www.example.com/(X(3)S(5l53uwuaffkddojv4iwb3snm))/foo/bar/index.htm

这看起来与这个问题和 MSDN 文章“了解 ASP.NET 无 Cookie 功能的工作原理”相同,除了我们对公共站点使用会话或会话 cookie,但对于我们的站点的 99%,我们实际上并不使用会话. 剩下的 1% 使用会话 cookie 来提供用户体验,所以我看不出这会如何导致我们网站的其他部分出现问题。

上述文章的这一部分似乎引用了这个问题:

当前会话状态如下所示:

有人对我如何解决这个问题有任何想法吗?有没有办法阻止这样的网址显示?

0 投票
1 回答
560 浏览

asp.net - 我可以覆盖特定页面的会话提供程序吗?

我可以指定一个页面的 InProc 会话提供程序,以及所有其他页面的数据库支持的会话提供程序吗?

0 投票
3 回答
3163 浏览

asp.net - ASP.NET SQL Server 会话状态极慢

我的 ASP.NET 应用程序出现问题,我需要网络农场,但是仅登录到我的应用程序大约需要 15 秒

我做了一个小实验,创建了我的应用程序的非网络农场版本,然后改用 INPROC 会话状态,登录时间是即时的。在这个测试实例中,我在同一台机器上运行 SQL Express。

我知道 SQL Server 上的会话状态较慢,但它不可能这么慢。关于如何追踪问题的任何建议?

这是我的会话状态:

我已经尝试过使用用户名密码以及集成安全性。

0 投票
1 回答
147 浏览

asp.net - 虚拟主机有奇怪的设置,需要替代会话状态建议

我正在为一个体育俱乐部建立一个网站。俱乐部对将他们的主机转移到不同的网络主机不感兴趣,所以我坚持使用当前主机。我将新的 Web 应用程序部署到主机上,但经过几个小时的测试,很明显在登录和会话状态方面有些奇怪。

每当我闲置超过 10 分钟时,我的 MVC 验证令牌就会突然停止解密。我进入 IIS 并将机器密钥设置为静态值,这个问题就消失了,但很明显他们将 ASP.NET 空闲超时设置设置为 10 分钟。这意味着如果站点上没有活动,每 10 分钟 InProc 会话数据就会被销毁。我向主机提交了支持票,但他们不愿意在我的应用程序池中为我更改该设置,并指出“目前无法在服务器上更改该设置,因为增加这可能会影响性能关闭(原文如此)服务器”。

俱乐部有点小,最多有 500 名俱乐部成员,很少有成员会经常访问该网站,所以我几乎可以保证每天会发生多次 10 分钟超时,而且我有会话超时设置为 60 分钟,因此如果站点的唯一用户在给定时间空闲 10 分钟,则让站点清除会话不是一个好主意。

我的第一个想法是使用 SQL 会话存储。我从未使用过它,但我知道它存在。但是,存在的一个警告是我们被限制为 350mb 的 SQL 存储。虽然这可能超出了该站点现在的需要,但我想我们可能会接近达到极限。我预计不会在会话中存储太多数据,仅在与贝宝和购物车交互时存储少量数据(可能这里或那里也有系统消息),所以也许这不是一个大问题?

我们确实有无限的磁盘空间,所以我想到的另一种选择可能是编写一个自定义的基于磁盘的会话存储解决方案。有什么理由这可能不是比 SQL 更好的主意吗?

最后,我有一个完全离谱的“天哪,我不敢相信我正在考虑这样做”的想法,即定期在每个页面上进行 AJAX 调用(例如,每 8 分钟一次)“ ping" 一个非缓存的轻量级 MVC 操作,只是为了让服务器保持活动状态。我认为,这可能会起作用,除了某人的一种情况:

  1. 转到购物页面并创建购物车
  2. 被转移到贝宝
  3. 无论出于何种原因在贝宝屏幕上花费 10 多分钟,而网站上没有其他人
  4. 回来看到他们的购物车消失了。

在这种情况下,我可能只是将购物车移动到数据库中。

所以......想法,评论,建议?对于东道主不让我改变这个设置,我真的很沮丧,我的第一反应是寻找另一个东道主,但正如我之前所说,俱乐部对东道主有一些奇怪的依恋,不想搬到其他地方。

提前致谢!

0 投票
3 回答
2705 浏览

iis-7 - SQLServer 会话状态

我正在使用 SessionState 的 InProc 模式,但由于应用程序池的回收,我的应用程序不断重新启动,因此我正在失去当前登录用户的会话。我想更改以将其保存在数据库中。我像这样编辑了我的webconfig

我是否必须为会话状态或新数据库创建一些表?我的主机是共享的,所以我无法访问管理控制台或其他任何东西。

0 投票
1 回答
9855 浏览

asp.net - 带有 allowCustomSqlDatabase="true" 的 ASP.NET SessionState 不会调用指定的数据库

此处的 Microsoft 文档

http://msdn.microsoft.com/en-us/library/h6bb9cz9(v=vs.90).aspx

并且一些 SO 文章表明,在 ASP.NET web.config 文件的 sessionState 声明中指定allowCustomSqlDatabase="true"将允许我使用默认的 ASPState 数据库覆盖并指定我自己的数据库名称。

我在 web.config 文件中设置了这些属性。

当我尝试调出默认网站页面时,我收到一条错误消息,指出无法访问 ASPState 数据库。

我已经使用 SQL Profiler 监控了 SQL 流量,并注意到失败是由以下请求引起的:

我已回收应用程序池并重新启动 IIS 以尝试刷新可能存在的任何缓存数据库名称引用,但这无济于事。我的理解是 ASP.NET SessionState 将使用我指定的数据库名称DR_ASPState来生成用于连接到 SessionState 数据库的 SQL 语句。但它确实似乎[ASPState]被硬编码到框架中。

任何人都可以发现我做错了什么或提供有关如何解决此问题的有用故障排除信息吗?