Tag: session

我从javascript调用ASMX Web服务,它正在预防我的会话超时

编辑2: 我根据计划或最终用户的请求在服务器端运行后台进程,我需要向所有用户显示图像以通知他此进程正在运行,或者在进程运行时取出映像完了。 编辑2完成 我正在调用一个ASMX Web服务,该服务位于我的IIS上通过javascript托管的网站中,它正在预防我的会话超时。 为什么从客户端到Web服务的调用会阻止我网站上的会话超时? 有没有办法防止它? 如果您需要更清楚我的问题或更多细节,请告诉我。 编辑1: 根据@ Rene147在下面的答案中提供的信息和链接以及一些谷歌搜索,我在我的网络服务方面尝试了以下内容: [WebMethod(EnableSession=false)] public string GetSummary() { HttpContext.Current.Response.Cookies.Remove(System.Web.Security.FormsAuthentication.FormsCookieName); return “something”; } 但事实certificate, HttpContext.Current.Response.Cookies总是空的。 任何提示?

IRouteConstraint MVC4上的HttpContextBase.Session和HttpContext.Current.Session都为null

我无法在我的自定义RootConstraint类上访问Session,它被设置为null。 我搜索过但无法找到解决方案。 public class AdminRootConstraint : IRouteConstraint { public bool Match ( HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection ) { if ((string) values[“controller”] == “Login”) return true; return HttpContext.Current.Session != null && (bool)HttpContext.Current.Session[“IsAuthorized”]; } } 编辑 以下是httpContext参数在即时窗口中的外观。 可以提出一个想法。 httpContext {System.Web.HttpContextWrapper} [System.Web.HttpContextWrapper]: {System.Web.HttpContextWrapper} AllErrors: null AllowAsyncDuringSyncStages: false Application: {System.Web.HttpApplicationStateWrapper} ApplicationInstance: {ASP.global_asax} AsyncPreloadMode: […]

Http Web请求不维护会话

我有程序,我想废弃一些有用的学习材料给我。 这个站点还维护会话密钥和其他一些密钥。 如果我试图去嵌套页面然后它会把我扔出去并显示会话输出消息。 我无法在Web请求类中维护会话密钥。 所以请告诉我如何在Web请求类中维护会话。

IIS / .Net仅允许对给定用户会话进行单个并发响应

这是我的问题: 我们有一个.Net 4.5 Web表单应用程序。 由于服务器端的大量数据访问和操作,应用程序中的某些页面需要很长时间才能加载。 如果用户在页面完成加载之前关闭其浏览器选项卡,并打开新选项卡,则对新应用程序中的应用程序的任何请求将挂起20分钟或更长时间,或者只是超时。 但是,如果他们打开新的隐身窗口(Chrome)或其他浏览器,他们可以立即连接。 我相信这是因为.Net按顺序处理来自同一会话的并发请求,如下所述: ASP.NET会话状态概述 并发请求和会话状态对ASP.NET会话状态的访问是每个会话独占的,这意味着如果两个不同的用户发出并发请求,则同时授予对每个单独会话的访问权限。 但是,如果对同一会话发出两个并发请求(通过使用相同的SessionID值),则第一个请求将获得对会话信息的独占访问权。 第二个请求仅在第一个请求完成后执行。 (如果由于第一个请求超过锁定超时而释放信息的独占锁定,则第二个会话也可以访问。)如果@ Page指令中的EnableSessionState值设置为ReadOnly,则只读请求会话信息不会导致会话数据的独占锁定。 但是,会话数据的只读请求可能仍然必须等待由会话数据的读写请求设置的锁定才能清除。 我在研究这个问题时发现的一些post曾暗示(但未确认)当浏览器选项卡在响应完成之前关闭时,会话“卡住”并且不会响应来自同一会话的新请求直到该集合SessionTimeout期限已过。 我的假设是,接受来自隐身窗口的请求,因为它有一个新的会话。 除了等待超时之外,有没有人知道将会话释放到新请求的任何方法? 有没有办法检测客户端不再监听? 我发现Response.IsClientConnected ,看起来很有希望,但我不确定如何使用它。 注意:这是一个包含大量业务逻辑的遗留应用程序,当前条件不允许此时重写的时间或预算。 因此,建议“只是重新编写页面以便加载更快”并不是立即可行的,尽管我承认这确实是最好的解决方案。

将List 保存到ASP.NET中的会话

CartItems保存在SQL数据库中。 我想将所有CartItem放入List并转移到Instance.Items。 实例变量将保存到会话中。 代码如下。 public class ShoppingCart { public List Items { get; private set; } public static SqlConnection conn = new SqlConnection(connStr.connString); public static readonly ShoppingCart Instance; static ShoppingCart() { if (HttpContext.Current.Session[“ASPNETShoppingCart”] == null) { Instance = new ShoppingCart(); Instance.Items = new List(); HttpContext.Current.Session[“ASPNETShoppingCart”] = Instance; } else { Instance = (ShoppingCart)HttpContext.Current.Session[“ASPNETShoppingCart”]; } } […]

Application_EndRequest不会在404上触发

我正在使用ASP MVC 2和Nhibernate。 我已经创建了一个HTTP模块,如夏天的NHibernate 13所示,看起来像这样: public void Init(HttpApplication context) { context.PreRequestHandlerExecute += new EventHandler(Application_BeginRequest); context.PostRequestHandlerExecute += new EventHandler(Application_EndRequest); } private void Application_BeginRequest(object sender, EventArgs e) { ISession session = StaticSessionManager.OpenSession(); session.BeginTransaction(); CurrentSessionContext.Bind(session); } private void Application_EndRequest(object sender, EventArgs e) { ISession session = CurrentSessionContext.Unbind(StaticSessionManager.SessionFactory); if (session != null) try { session.Transaction.Commit(); } catch (Exception) { […]

在ASP.NET Core中启用来自同一会话的并发请求

编辑:这显然是在浏览器中测试的问题,而不是代码。 默认情况下,Core中的会话将被禁用。 原始问题: 我正在开发一个Web API,它需要同时处理多个请求,即使是来自同一个客户端。 它是一个ASP.NET核心MVC(1.1.2)应用程序,目前针对完整框架(4.5.2),主要是为了与其他库兼容。 当我第一次测试我的并发性时,我很惊讶这些请求根本不是并发的。 我用Google搜索并发现ASP.NET不会同时处理会话中的请求,而是将它们排队。 快速测试表明会话可能是罪魁祸首: [HttpGet(“sleep”)] public string Sleep() { Thread.Sleep(5000); return $”Done at {DateTime.Now:u}”; } 当我从同一浏览器中的多个选项卡快速请求时,每个选项卡之间需要5秒钟。 当我使用多个浏览器时,情况并非如此,它会在5秒钟内响应多次。 在搜索解决方案时,我一直在寻找在ASP.NET中禁用会话状态的方法,但对Core来说却没有。 就会话而言,我使用的是默认的API项目模板,而我没有采取任何措施来专门启用/设置会话状态。 有没有办法摆脱ASP.NET Core中的会话状态? 或者是否有更好的解决方案来启用并发请求?

NHibernate问题与指定的字符串ID和不同的案例字符

我在NHibernate上保存一个带有指定字符串Id的实体时遇到问题……我试着用一个例子来解释这个问题。 好吧,如果我执行这些语句,假设在ID为“AAA”的数据库上有一个实体 ENTITYTYPE entity = Session.Get(“AAA”); ENTITYTYPE newentity = new ENTITYTYPE() { Id = “aaa” }; Session.Delete(entity); Session.Save(newentity); Session.Flush(); 在Flush上,NHibernate使用以下消息引发exception:“无法使数据库状态与会话同步”/“违反PRIMARY KEY” 它似乎与Case Sensitive ID有问题,如果我在“newentity”的Id上使用“AAA”然后它可以工作,但在我的情况下并不那么容易,我要找到另一种解决方案。 如何避免这种exception? 你能帮助我吗?

CookieContainer混乱

据我所知,CookieContainer通过HttpWebRequests持久化Cookie的基本用法如下: HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); CookieContainer cookies = new CookieContainer(); request.CookieContainer = cookies; using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) { // Do stuff with response } 然后: request = (HttpWebRequest)WebRequest.Create(new url); request.CookieContainer = cookies; etc… 但我无法理解这个过程背后的逻辑。 变量cookie在初始化后似乎没有被重新分配。 第一个WebResponse的cookie到底是如何进入第二个WebRequest的?

在C#MVC3中重用跨控制器的会话

我正在使用MVC3在C#中创建一个网站。 该网站是使用Web服务的客户端。 Web服务使用每个用户的唯一会话ID,该ID是每个服务调用中的最后一个参数。 您在登录时获得会话ID。 我能够获取会话ID并将其保存在用户控制器的属性中: private string Sid { get { var sid = Session[“Sid”]; return sid == null ? “” : sid.ToString(); } set { Session[“Sid”] = value; } } 在我的其他控制器中,我能够获得具有类似属性的会话ID(只是没有setter),但是当它要求用户控制器做某事时,它访问自己的属性来获取id,会话为空。 似乎会话不会在控制器之间传输,但我不知道如何做到这一点。 我想从一个中心位置访问会话,而不是在每个控制器中都有属性,但我无法弄清楚如何做到这一点。 经过三天的搜索,谷歌无法给我答案。 你有什么想法?