会话状态信息无效,可能在ASP.Net中已损坏

时间:2013-11-28 12:35:58

标签: asp.net session-variables session-state

我正在使用带有C#的ASP.Net 3.5,开发ID:Visual Studio 2008.当我使用

Session["FileName1"] = "text1.txt" 

它工作正常,但后来我正在使用

number1=17;
string FileName1="FileName1" + number1.toString(); 

然后用

设置
Session[FileName1]="text1.txt";

给我运行时错误

  

会话状态信息无效且可能已损坏   在System.Web.SessionState.SessionStateItemCollection.Deserializer(BinaryReader reader)

当我在Session变量中使用字符串时,有人能解决我的问题吗?请记住,它适用于我的开发机器(意味着本地Visual Studio),但是当部署到服务器时,它会提供错误。

enter image description here

4 个答案:

答案 0 :(得分:5)

在尝试通过Session [FileName1]语法访问它之前,确保FileName1变量不为null ...

这是指向遇到同样问题的其他人的链接: http://forums.asp.net/t/1069600.aspx

这是他的答案:

在代码中,我找到了以下行:

//some code
Session.Add(sessionVarName, sessionVarValue);
//some other code
  

显然,由于一些脏数据,有一段时间   sessionVarName为null。

     

Session.Add在这种情况下不会抛出任何异常,如果你的话   会话模式是" InProc",没有问题。但是,如果你的   在会话反序列化期间,会话模式是" SQLServer"   商店,你会得到我的例外。所以,过滤掉脏   数据,我修改了代码成为:

if (sessionVarName != null)
{
  //somecode
  Session.Add(sessionVarName, sessionVarValue);
  //some other code
}  

答案 1 :(得分:2)

您的错误原因是

xyz = new Guid() is also xyz= Guid.Empty;

所以当你尝试转换为字符串时,它会抛出错误。

只需修改类似的代码即可。

Guid guId = System.Guid.NewGuid(); 
string x = guId .ToString();
string FileName1="text1.txt" + x;
Session[FileName1]="text1.txt";

答案 2 :(得分:0)

在将它们存储在会话中之前检查您的值,它们可能会在会话存储的反序列化过程中导致此异常,过滤您的数据。 查看Here

if(!string.IsNullOrEmpty(FileName1))
{
  Session.Add(FileName1, "text1.txt");
}

或检查字符串中的无效字符。

答案 3 :(得分:-1)

您可以将值添加到会话中这样

    string FileName1="FileName1" + number1.toString(); 

if(!string.IsNullOrEmpty(FileName1))
{
  Session.Add(FileName1, "text1.txt");
}