我创建了一个在ASP.Net和Microsoft SQL Server 2016 Standard Edition上运行的基于Web的应用程序。该应用程序本地托管在IIS上。我有两个正在运行应用程序的服务器,并且在这两个服务器上,Always On Availablity组中有SQL Server。有一个硬件负载平衡器使用循环算法发送请求,因此这就是我将Session设置为数据库的原因。两台计算机上的机器密钥相同,并且IIS应用程序池设置为仅在午夜刷新一次。两台服务器上的应用程序路径都相同,并且群集IP引用了SQL Always On。
问题在于会话变量有时会变为空。会话变量不多,并且都是String类型的。
这是我的web.config部分。
<connectionStrings>
<add name="SQLConnectionString" connectionString="server=SERVERIP,PORT;Database=DATABASE;uid=USERNAME;pwd=PASSWORD;Max Pool Size=10000" />
</connectionStrings>
<pages controlRenderingCompatibilityVersion="4.0" clientIDMode="AutoID" enableSessionState="true" />
<sessionState mode="SQLServer" allowCustomSqlDatabase="true" sqlConnectionString="SQLConnectionString" cookieless="AutoDetect" timeout="10" />
<machineKey decryptionKey="DECRYPTION KEY" validationKey="VALIDATION KEY" />
这是我访问会话变量的方式。
//Intermediate steps are omitted obviously like creating captcha, login validation, etc.
Session["captcha"] = captcha.ToString();
if (Session["captcha"].ToString() == txtCaptcha.Text)
{
//ValidateLogin
//if credentials are correct
{
Session["Uname"] = username.Text.ToLower().Trim();
Session["HomeDir"] = GetHomeDirectory(Session["Uname"].ToString());
}
}
// on another page
lblUname.Text = Session["Uname"].ToString();
String homedir = Session["Homedir"].ToString();
会话变量变为null的原因是什么?解决方案是什么?