【发布时间】:2017-01-06 15:12:03
【问题描述】:
这是我第一次构建 Web 应用程序。我想使用 ajax 访问 Default.aspx 中的 Loggingout 功能以清空 MySession。 Ajax 调用返回成功而不是错误,但 MySession 尚未清除。
<script type="text/javascript">
$(document).ready(function () {
$("#Logout2").click(function (e) {
alert(99);
$.ajax({
type: 'POST',
url: 'Default.aspx/Loggingout',
data: '{a}',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (msg) {
window.location = '<%=this.ResolveClientUrl("~/Default.aspx")%>';
},
error: function (e) {
alert(0);
}
});
e.preventDefault();
});
});
</script>
我已经为测试设置了警报,它不会进入错误端,即 alert(0)。它已成功返回默认页面而无需清除 MySession。我尝试在 Loggingout 函数上设置断点,但它没有在该函数中运行。
<script type="text/C#" runat="server">
[WebMethod]
public static string Loggingout(string a)
{
CarPark.MySession.Current.UserID = Guid.Empty;
CarPark.MySession.Current.Username = "";
CarPark.MySession.Current.UserEmail = "";
CarPark.MySession.Current.UserRole = "";
return "done";
}
这是在Default.aspx页面中写的函数。
public class MySession
{
// private constructor
private MySession()
{
UserID = Guid.Empty;
Username = "";
UserEmail = "";
UserRole = "";
}
// Gets the current session.
public static MySession Current
{
get
{
MySession session =
(MySession)HttpContext.Current.Session["__MySession__"];
if (session == null)
{
session = new MySession();
HttpContext.Current.Session["__MySession__"] = session;
}
return session;
}
}
public Guid UserID { get; set; }
public string Username { get; set; }
public string UserEmail { get; set; }
public string UserRole { get; set; }
}
如果您想查看 MySession
【问题讨论】:
-
您使用的是哪种会话?在我看来,您正在使用自定义 Session 对象?还是你使用内置的 Session?
-
那么断点永远不会在 LoggingOut 方法中被命中?还是运行时断点不活动?你能确认 LoggingOut 运行吗?您如何存储会话数据?
-
我假设您没有在成功 msg 变量中“完成”。你得到了什么?很明显,您的调用没有到达您的网络方法,因为您的断点没有触发,这解释了为什么会话没有被清除,除非您没有正确挂钩调试器。请修改您的成功签名并发布所有返回的信息,以便我们为您提供帮助。它应该是这样的:function (data, textStatus, jqXHR)。
-
是的,我没有在成功消息中“完成”,消息显示为 [object Object]
-
在开发控制台中检查该对象。它应该告诉你发生了什么。在此处发布。