这是我的代码登录
var expire = DateTime.Now.AddDays(7);
// Create a new ticket used for authentication
var ticket = new FormsAuthenticationTicket(
1, // Ticket version
username, // Username to be associated with this ticket
DateTime.Now, // Date/time issued
expire, // Date/time to expire
true, // "true" for a persistent user cookie (could be a checkbox on form)
roles, // User-data (the roles from this user record in our database)
FormsAuthentication.FormsCookiePath); // Path cookie is valid for
// Hash the cookie for transport over …Run Code Online (Sandbox Code Playgroud) 我正在阅读演练:创建异步HTTP处理程序并注意到它们HttpContext从处理程序线程传递并在WaitCallback后台线程上运行它.它会像打电话一样_context.Response.Write().我是否正确假设这不违反HttpContext不是线程安全的事实,因为处理程序线程在异步工作开始后不会使用它?
此外,跨线程使用HTTPContext有一些关于HttpContext和线程的好信息.是不是所有的HttpContext都不是线程安全的,或只是像Response?Items如果仅在读取模式下,多个后台线程可以访问该属性吗?
我不是在谈论使用'ApplicationHost'类托管ASP.NET.例如,如果我创建一个Console应用程序,创建一个有效的HttpContext对象并将其传递给自定义Page对象的ProcessRequest,它是否会填充HttpReponse html,就好像它在ASP.NET中运行一样?
经过一段时间的谷歌搜索后,我还没有找到任何关于HttpContext的线程安全性的权威,确凿的信息.
我正在看一个场景,例如:
public class AsyncHandler : IAsyncHttpHandler
{
void BeginProcessRequest(...)
{
// Spawn some tasks in parallel, provide them with current HttpContext as argument.
}
void EndProcessRequest(...) {...}
}
Run Code Online (Sandbox Code Playgroud)
My(io bound)并行任务可能希望同时访问HttpContext.
看看各个帖子似乎这是安全的,但是,我想要一些实际的证据.当然MSDN给出了通常的"静态线程安全等",但除了我必须假设它不是线程安全之外,这没有任何帮助.
我在StackOverflow上看过各种帖子(比如这里,或者这里,或者这里),但这个问题没有真正的答案.
使用.NET 4.5中的所有异步工作,如果HttpContext不是线程安全的话,这似乎有点奇怪,但是,如果确实不是这样,有没有办法让它成功呢?我能想到:
但这一切都感觉有点糟糕和太多的工作.
编辑:在更详细地研究这个,以及稍后的一些反思后,我相信它实际上并不重要HttpContext不是线程安全的.我在这篇博文中详述了这一点.要点是在ASP.NET中使用正确的SynchronizationContext可确保一次只能有一个线程访问上下文.
在StructureMap中,如何在特定的Container实例上释放和处理Http范围的对象?对于Object Factory中的默认intance,我可以执行该方法ReleaseAndDisposeAllHttpScopedObjects(),但Container类和IContainer接口似乎没有这样的方法.
HttpContext.Current.Items["ctx_" + HttpContext.Current.GetHashCode().ToString("x")]
Run Code Online (Sandbox Code Playgroud)
我看到这个确切的代码都 ... 在 ...... 在 ...... 的地方,但我必须忽视的东西.在回答这些帖子时常常质疑使用HttpContext的适当性,但没有人指出GetHashCode是冗余的,固定字符串也可以.
我在这里俯瞰什么?
编辑:问题是,每个HttpContext.Current的GetHashCode()都是相同的,那么为什么在我提供的四个链接中使用GetHashCode()?其中一些是有相当多工作的帖子,所以我觉得他们可能正在解决我忽略的一些线程或上下文问题.我不明白为什么只是HttpContext.Current.Items ["ctx_"]不会完全相同.
它是使用SQL Membership Provider进行身份验证的Plain ASP.NET应用程序.虽然应用程序在大多数时间运行良好.我们最近看到用户抱怨他们正在看到其他用户帐号.
我很确定并再次确认我直接在代码中使用HttpContext.Current.User.Identity.Name来获取用户信息.因此,在重负载下,我会返回不同的用户名.
有没有人遇到类似的问题?有可能吗?
应用程序运行在ASP.NET 4.0,Web窗体,无缓存,代码中没有处理任何cookie,没有嗅探cookie的Javascripts.
我看到这两个链接大致相同但没有回答.
http://bytes.com/topic/asp-net/answers/324385-serious-issue-httpcontext-current-user-identity-name
http://www.experts-exchange.com/Web_Development/Miscellaneous/Q_21105924.html
我有一个HttpModule应该限制访问/courses/我的网站目录的实现,但它有一个主要问题.
Request.IsAuthenticated永远false.
这是代码:
using System;
using System.Web;
public class CourseAuthenticationModule : IHttpModule
{
public void Dispose() { }
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(BeginRequest);
}
public void BeginRequest(Object source, EventArgs e)
{
HttpApplication app = (HttpApplication)source;
HttpContext context = app.Context;
HttpRequest request = context.Request;
HttpResponse response = context.Response;
if (request.Path.ToLower().StartsWith("/courses/")
&& !request.IsAuthenticated)
{
response.Redirect("/");
}
}
}
Run Code Online (Sandbox Code Playgroud)
我不知道为什么会发生这种情况,但条件总是会true在访问/courses/目录时进行评估.
编辑:
我在Web.Config中找到了这个.不确定它是否相关.
<authentication mode="Forms">
<forms loginUrl="userlogin.asp" …Run Code Online (Sandbox Code Playgroud) 有一个非System.Web/HttpContext替代HttpContext.Current.Items,每请求数据存储?
我想保存请求的信息,保存它们并从我的记录器(NLog)中读取值.我发现一个好地方是DefaultHttpControllerActivator/IHttpControllerActivator.
这样,日志消息应始终看起来相同,并且开发人员对提供的格式或信息没有太大影响.
编辑:经过一些研究后我发现了这一点: 我们如何为异步.net方法创建一个callcontext? 我希望使用具有不可变集合的逻辑调用上下文将按预期工作.
我需要访问HttpContext页面(.cshtml),尤其是访问请求和Cookie。尽管可用,但 HttpContextAccessor始终在其属性中存储一个空值HttpContext。
任何想法将不胜感激。
提前致谢。
编辑:我使用的Blazor版本是:0.7.0。
httpcontext ×10
asp.net ×6
c# ×4
.net ×2
asp.net-mvc ×2
httprequest ×2
blazor ×1
cookies ×1
httphandler ×1
httpmodule ×1
nlog ×1
structuremap ×1