为什么ASP.NET页面中Session -object 上的属性SessionID在请求之间发生变化?
我有一个这样的页面:
...
<div>
SessionID: <%= SessionID %>
</div>
...
Run Code Online (Sandbox Code Playgroud)
每次我点击F5时输出都会不断变化,与浏览器无关.
我在ASP.Net MVC中创建一个ActionResult来提供图像.启用会话状态后,IIS将一次只处理来自同一用户的一个请求.(这不仅适用于MVC.)
因此,在具有多个图像回调此Action的页面上,一次只能处理一个图像请求.这是同步的.
我希望这个图像Action是异步的 - 我希望每次执行多个图像请求而不需要前一个完成.(如果图像只是静态文件,IIS会以这种方式为它们提供服务.)
所以,我想禁用Session仅用于对该Action的调用,或者指定某些请求没有Session状态.任何人都知道如何在MVC中完成这项工作?谢谢!
这是一个月前问的面试问题....
会话使用cookie吗?如果是这样,他们是如何做到的?
假设Session["UserId"]=1
此会话变量如何在内部使用cookie?如果是这样,cookie的名称是什么,该cookie的价值是什么......
当我在Global.asax.cs中创建一个空的Session_Start处理程序时,它会在向浏览器呈现页面时造成重大影响.
如何重现:
创建一个空的ASP.NET MVC 3 Web应用程序(我正在使用MVC 3 RC2).然后使用以下代码添加Home控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Number(int id)
{
return Content(id.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
接下来创建一个视图Home/Index.cshtml并将以下内容放在BODY部分中:
@for (int n = 0; n < 20; n++)
{
<iframe src="@Url.Content("~/Home/Number/" + n)" width=100 height=100 />
}
Run Code Online (Sandbox Code Playgroud)
当您运行此页面时,您将看到页面上出现20个IFRAME,每个IFRAME都有一个数字.我在这里所做的就是创建一个页面,在幕后加载20多页.在继续之前,请注意这20页加载的速度(刷新页面几次以重复加载).
接下来转到你的Global.asax.cs并添加这个方法(是的,方法体是空的):
protected void Session_Start()
{
}
Run Code Online (Sandbox Code Playgroud)
现在再次运行该页面.这次你会注意到20个IFRAME的加载速度要慢得多,一个接一个地大约相隔1秒.这很奇怪,因为我们实际上并没有在Session_Start中做任何事情......它只是一个空方法.但这似乎足以导致所有后续页面的减速.
有谁知道为什么会这样,更好的是有人有修复/解决方法吗?
更新
我发现只有在附加调试器(使用F5运行)时才会出现此行为.如果你在没有连接调试器的情况下运行它(Ctrl-F5),那么它似乎没问题.所以,也许这不是一个重大问题,但它仍然很奇怪.
asp.net ×4
session ×2
actionresult ×1
asp.net-mvc ×1
asynchronous ×1
c# ×1
cookies ×1
global-asax ×1
sessionid ×1