【问题标题】:Need to clear MySession data before Logging out successfully using Ajax需要在使用 Ajax 成功注销之前清除 MySession 数据
【发布时间】: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]
  • 在开发控制台中检查该对象。它应该告诉你发生了什么。在此处发布。

标签: c# asp.net ajax webforms


【解决方案1】:
[WebMethod]
public static string Loggingout(string a)
{
    // if you use FormsAuthentication call this.
    FormsAuthentication.SignOut();

    // You can clear your session....
    HttpContext.Current.Session.Clear();

    // ... or just set your session to a new object.
    HttpContext.Current.Session["__MySession__"] = new MySession();

    return "done";
}

【讨论】:

  • 谢谢! :D 但我发现还有另一个问题是我的 ajax 无法正常工作,因为它没有命中 Loggingout 功能。我尝试在 ajax -> success: function (data, textStatus, jqXHR) 中修改成功部分。结果是 data = [object Object], status = "success", jqXHR = [object Object] 。对象是什么意思?
  • ...只需alert(jqXHR.status + ' : ' + jqXHR.statusText); 并发布它的输出。
  • ... 并将您的 ajax 请求中的 data 属性更改为:data: '{ a: "SOME TEXT"}'
【解决方案2】:
Session.Abandon() Method

Abandon 方法销毁存储在 Session 对象中的所有对象并释放它们的资源。如果不显式调用 Abandon 方法,服务器会在会话超时时销毁这些对象。

参考 :- https://msdn.microsoft.com/en-us/library/ms524310(v=vs.90).aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 2022-06-21
    • 2020-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多