Dan*_*aan 1 asp.net-mvc session asp.net-mvc-4
经过一些好的测试后,BIG更新
我有一个MVC4 Web应用程序,我只是在visual studio 2010中调试它,只是为了更多地了解webdevelopment(特别是MVC).我现在正在玩Session.但是我不明白为什么在新的httprequest之后我丢失了变量.
就像这个问题:丢失我的会话变量
我对会话部分的web.config看起来像:
<sessionState mode="InProc"
cookieless="false"
timeout="20"/>
Run Code Online (Sandbox Code Playgroud)
我的小测试项目隔离问题工作正常,看起来像:
控制器 - HomeController
public class HomeController : Controller
{
//
// GET: /Test/
public ActionResult Index()
{
string t = (string)Session["Test1"];
ViewBag.Result = t;
return View();
}
}
Run Code Online (Sandbox Code Playgroud)
MysessionController
public class MysessionController:Controller {// // GET:/ Mysession /
public ActionResult Index()
{
return View(new Models.Mysession() {ID = Session.SessionID});
}
[HttpPost]
public ActionResult Index(Models.Mysession mySession) {
Session["Test1"] = "Bla";
return RedirectToAction("Index", "Home");
}
}
Run Code Online (Sandbox Code Playgroud)楷模
public class Mysession {
[Required]
public string ID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
查看
家
Index.cshtml
@ {ViewBag.Title ="索引"; }
@@ ViewBag.Result @ @((string)Session ["Test1"])@ Html.ActionLink("我的会话","索引","Mysession")
MySession的
Index.cshtml
@model SessionTest.Models.Mysession @ {ViewBag.Title ="Index"; }
@using(Html.BeginForm()){
@Html.ValidationSummary(false)
<fieldset>
<legend>Mysession</legend>
<div class="editor-label">
@Html.LabelFor(model => model.ID)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.ID)
</div>
<p>
<input type="submit" value="Log in" />
</p>
</fieldset>
Run Code Online (Sandbox Code Playgroud)
}
这看起来像我的主要应用程序,DIFFERENCE是:在HTTPPOST索引操作中的MysessionController,其中设置了会话变量我访问XML文件以查找某些内容.
XML文件是我的持久存储,因为我没有SQL服务器.我的问题是,这会影响我的会话吗?
如果是这样,我想指出我访问XML文件PRIOR以在会话中设置变量.所以我觉得很奇怪.但我通过测试确定,如果我不访问XML文件,那么会话中的变量就可以了.如果我访问XML文件,则在RedirectToAction之后会话中的vars为null.
我不知道为什么我昨天没有得出这个结论.对不起大家.我昨天做了一些草率的测试.
首先,我要感谢所有在这个问题上花时间的人.在我结识并最终进行了适当的测试之后,我确定了访问硬盘驱动器上的XML文件的问题.不知道昨天我搞砸了什么......
我在Google上发现了一些关于在访问文件后丢失会话的帖子和文章.像这个:
Tessa Ferrandez的精彩案例研究.并且在较小的范围内:http: //forums.asp.net/t/998370.aspx/1
和:
http://blogs.msdn.com/b/toddca/archive/2005/12/01/499144.aspx
结论
当您以任何方式访问您网站的文件时,AppDomain将被刷新,这将刷新您的会话.
切勿将您需要通过网站访问的文件放在"bin"文件夹中.我已将我的XML文件移动到App_Data,并且变量在Session中保持不变.
在我的博客上总结了我的答案:http://dannyvanderkraan.wordpress.com/2013/08/21/losing-session-variables-with-asp-net/
| 归档时间: |
|
| 查看次数: |
6257 次 |
| 最近记录: |