我如何列出(并遍历)所有当前的ASP.NET会话?
Session.Clear()和Session.Abandon()都消除了会话variables。 据我了解,放弃()结束当前会话,并导致创build一个新的会话,从而导致结束和启动事件触发。 在大多数情况下,最好调用Abandon(),例如将用户login。 有没有我会使用Clear()的场景? 性能差异有多大?
由于对我们的一些产品进行渗透testing,当时看起来是一个“简单”的问题需要解决的事情变得艰难。 当然不是,当然,我的意思是为什么要为当前的HTTPContext生成全新的会话非常困难? 离奇! 无论如何,我已经写了一个厚脸皮的小实用程序课,“只是做”: (道歉代码格式化/突出显示/ Visual Basic我必须做错了什么) Imports System.Web Imports System.Web.SessionState Public Class SwitchSession Public Shared Sub SetNewSession(ByVal context As HttpContext) ' This value will hold the ID managers action to creating a response cookie Dim cookieAdded As Boolean ' We use the current session state as a template Dim state As HttpSessionState = context.Session […]
我想有一个非常轻量级的ASP.NET MVC网站,其中包括尽可能多的删除通常的HttpModules和禁用会话状态。 但是,当我尝试做到这一点,我得到以下错误: The SessionStateTempDataProvider requires SessionState to be enabled. 我在web.config中禁用了会话状态: <sessionState mode="Off" /> 我知道ASP.NET MVC使用TempData的会话状态,但我不需要/需要TempData – 我只是想禁用会话状态。 帮帮我!
我目前正在使用的项目涉及使用会话variables的MS SQL Server和ASP.net Web服务。 显然这会导致客户端的调用按顺序执行。 我想确保这些方法asynchronous执行。 在做了一些研究之后,我认为最好的方法是使用跟踪会话(使用guid说)的表以及每个会话的单独表来保持会话状态在数据库中。 在我直接介入这个之前,我需要知道如果我configurationSQL Server来存储会话,是否可以获得Web服务的asynchronous操作。 我可以吗 ?
我已经阅读了很多关于智威汤逊以及如何通过智威汤逊创build“无状态”会话的内容。 我所理解的要点是,由于签名和到期,你可以基本上发送整个会话由客户端保存,服务器不必维护一个数据库来记住会话。 我不明白的是如果你的用户需要注销会发生什么,或者你需要在到期之前使会话无效? 从技术上讲,你可以指示浏览器从客户端删除它,但是你不能确定这是否真的发生。 令牌本身在技术上仍然有效,如果您的删除说明没有遵循,它仍然可以使用。 这种理解是否正确? 如果是这样,这是不是客户端会话pipe理的一个巨大的错误? 除了让服务器存储会话或缩短到期时间之外,还有什么方法可以克服这一点吗?
我真的可以从我的HTTPModule更新用户的会话variables,但从我可以看到,这是不可能的。 更新:我的代码当前正在OnBeginRequest ()事件处理程序中运行。 更新:到目前为止收到的build议,我试图将其添加到我的HTTPModule中的Init ()例程: AddHandler context.PreRequestHandlerExecute, AddressOf OnPreRequestHandlerExecute 但在我的OnPreRequestHandlerExecute例程中,会话状态仍然不可用! 谢谢,如果我失去了一些东西,我很抱歉!
我试图在两个Web应用程序之间共享会话,这两个应用程序都托pipe在同一台服务器上 一个是.net 2.0 web表单应用程序,另一个是.net 3.5 MVC2应用程序。 这两个应用程序的会话都是这样设置的: <sessionState mode="StateServer" stateConnectionString="tcpip=127.0.0.1:42424" /> 在webform应用程序中,我将会话密钥发布到MVC应用程序中: protected void LinkButton1_Click(object sender, EventArgs e) { Session["myvariable"] = "dan"; string sessionKey = HttpContext.Current.Session.SessionID; //Followed by some code that posts sessionKey to the other application } 然后我在MVC应用程序中收到它,并尝试使用像这样的相同的会话: [HttpPost] public void Recieve(string sessionKey ) { var manager = new SessionIDManager(); bool redirected; bool IsAdded; […]
我需要一些澄清。 我一直在阅读REST,并构建RESTful应用程序。 根据维基百科,REST本身被定义为具象状态传输 。 因此,我不明白所有这些每个人都在不停地喷涌而出的无国界的大杂烩 。 从维基百科: 在任何特定的时间,客户可以在应用程序状态之间转换或“静止”。 处于休眠状态的客户端能够与其用户进行交互,但不会创建任何负载,也不会消耗服务器组或网络上的每个客户端存储。 他们只是说不使用会话/应用程序级别的数据存储? 我得到REST的一个目标是使URI访问一致和可用,例如,而不是在帖子内部隐藏分页请求,使得请求的页码成为GET URI的一部分。 对我有意义。 但似乎只是过度的说, 每个客户端数据 (会话数据)都不应该存储在服务器端。 如果我有一个消息队列,并且我的用户想要阅读这些消息,但是当他阅读这些消息的时候,想要在会话期间阻止某些发送者消息通过? 将它存储在服务器端的地方是否有意义,并让服务器只发送未被用户阻止的消息(或消息ID)? 每次我请求新的消息列表时,是否真的必须发送整个消息发送者列表来阻塞? 与我相关的消息列表首先不会/甚至不应该是公开可用的资源。 再次,只是想明白这一点。 有人请澄清。 更新: 我发现了一个堆栈溢出的问题,有一个答案,不完全让我一路在那里: 如何管理REST的状态,它表示,重要的客户端状态应该在每个请求都转移…. Ugg ..似乎有很多的开销…这是对的吗?
ASP.Net会话对于传统的WebForms应用来说显得非常完美,但是它们对于现代的AJAX和MVC应用程序来说是一些严重的问题。 具体来说,只有3种方法可以访问ASP.Net提供程序: 锁定读写 (默认) – 会话从AcquireRequestState触发被锁定,直到ReleaseRequestState触发。 如果一次从浏览器发出3个请求,他们将在服务器上排队。 这是MVC 2中唯一的选择,但MVC 3允许… 非锁定只读 – 会话未锁定,但不能保存到。 这似乎是不可靠的 ,因为一些读取似乎再次锁定会话。 会话已禁用 – 任何尝试读取或写入会话都会引发异常。 但是,现代的MVC应用程序,我有很多AJAX事件同时发生 – 我不希望他们在服务器上的队列,但我希望他们能够写入会话。 我想要的是第四种模式: 脏读,最后写赢 我认为(乐于纠正)唯一的方法就是完全取代ASP.Net的会话。 我可以编写自己的提供程序 ,但ASP仍然会使用它支持的三种模式之一来调用它。 有什么办法让ASP.Net支持乐观并发? 这让我用一个基本上做同样事情的新类替换了所有对会话的调用,但是不锁 – 这是一个痛苦。 我希望尽可能多地保留当前会话的内容(在各种日志中最重要的会话ID),并尽可能少地替换代码。 有没有办法做到这一点? 理想情况下,我希望HttpContext.Current.Session指向我的新类,但没有ASP.Net锁定任何请求。 有没有人已经做过这样的事情? 看起来奇怪的是,在所有的AJAXey MVC应用程序中,这是ASP的一个新问题。