我尝试在用户登录时在Ajax调用期间创建会话。当我处于Inproc模式时,一切正常。 当我将其更改为SQLServere模式时,每当我在调试模式下看到创建会话时,在执行回发之后保留在Ajax期间创建的任何会话。 在按钮单击或页面加载(非Ajax)期间创建的其他会话停留在哪里..任何关于它为什么不保留的想法?
这是一个非常好的开端.. ajax调用是
function Authenticate(userID) {
$.ajax({
type: "POST",
url: "/GlobalService.asmx/CreateAuthentication",
data: JSON.stringify({ ID: userID }),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
//Some simple logic to show username
}
});
ajax调用背后的代码
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
[WebMethod(EnableSession = true)]
public void CreateAuthentication(string UserID)
{
if (UserID != null)
{
try
{
HttpContext.Current.Session["UserID"] = UserID;
}
catch (Exception ex)
{
}
}
}
不工作配置:
<sessionState mode="SQLServer" sqlConnectionString="data source=.\SQLEXPRESS;Integrated Security=SSPI" cookieless="false" timeout="3" />
答案 0 :(得分:0)
这是很久以前的事了但是我在这里
(1)如果你的会话设置不正确,catch all块会掩盖任何错误。
(2)要跟踪错误,我会(在IE11中)按F12,跟踪网络呼叫。您可能会在响应部分看到一条错误消息,说明为什么它不能将会话写入数据库
此外,您使用的是SQLExpress,因此我认为默认情况下会话到期无效,但这不是