【问题标题】:How to logout from a particular project using asp.net如何使用 asp.net 从特定项目中注销
【发布时间】:2013-12-30 15:31:37
【问题描述】:

我试图只从一个项目中注销,但问题是当我一次在浏览器中运行两个 Web 项目时。在两者都登录后,我单击第一个项目的注销按钮,但两个项目的会话在任何一个注销按钮单击时自动结束。

我使用Session.Abandon();注销。

我使用的是 Visual Studio 2012,我可以只退出一个项目吗?

这是我的登录代码

protected void btnLogin_Click(object sender, EventArgs e)
{
    con.Open();
    qry = "select * from UserTable where Uname='" + txtUname.Text + "' and Pwd='" + txtPwd.Text + "' ";
    com = new SqlCommand(qry, con);
    dr = com.ExecuteReader();
    if (dr.Read())
    {
        Session["UName"] = txtUname.Text;
        Session["Pwd"] = txtPwd.Text;
        Session["Name"] = dr["Name"].ToString();
        Session["Mail"] = dr["Mail"].ToString();
        if (chkStayLogin.Checked)
        {
            Response.Cookies["rsstl"]["stul_"] = crypt.Encrypt(uname);
            Response.Cookies["rsstl"]["stpl_"] = crypt.Encrypt(pwd);
            Response.Cookies["rsstl"].Expires = DateTime.Now.AddMonths(12);
        }
        else
        {
            Response.Cookies["rsstl"].Expires = DateTime.Now.AddDays(-1);
        }
        con.Close();
        Response.Redirect("Home.aspx");
    }
    else
    {
        lblLogin.Visible = true;
        lblLogin.Text = "Enter Valid User Name And Password";
    }
    con.Close();
}

还有我的登出代码

protected void btnLogout_Click(object sender, EventArgs e)
{
    HttpCookie cki = new HttpCookie("rsstl");
    cki.Expires = DateTime.Now.AddDays(-1);
    Response.Cookies.Add(cki);
    Session.Abandon();
    Response.Redirect("Home.aspx");
}

我在其他项目中使用相同的代码。

【问题讨论】:

  • 这完全取决于您登录网站的方式。请上传登录代码。如果你使用form authentication,请同时在web.config中发布authentication标签。
  • 现在我在问题中添加了登录和注销代码
  • 如何区分两个站点之间的登录?它们是否托管相同的域名,例如 site1.mysite.comsite2.mysite.com?这是单点登录吗? 这是一个学校项目吗?
  • 对不起,先生,我没有提到我正在本地主机上尝试这个。第一个项目是我的暑期培训项目(在线火车票预订),第二个是我的最后一年项目(在线考试系统),当我将这两个项目托管在同一个域上时会有什么问题吗?

标签: asp.net session


【解决方案1】:

尝试在新会话中在 IE 中运行

File -> new session

【讨论】:

    【解决方案2】:

    我正在我的本地主机上尝试这个。第一个项目是我的暑期训练 项目(在线火车票预订)和第二个是我的最后一年 项目(在线考试系统),当我有任何问题 将这两个托管在同一个域上吗?

    根据上面的评论,两个站点的cookie是相同的,并且存储在同一个域名下,即localhost。

    因此,当用户从站点 1 注销时,他/她将自动从站点 2 注销,因为他们共享相同的 cookie。

    为了避免这种情况,您需要存储两个不同的 cookie 名称。例如

    Response.Cookies["rsstl" + site1]["stul_"] = crypt.Encrypt(uname);
    Response.Cookies["rsstl" + site1]["stpl_"] = crypt.Encrypt(pwd);
    

    其他想法

    1. 使用参数化查询避免SQL Injection
    2. FormsAuthentication 可能比您目前所做的要容易得多。 但是,这超出了您最初问题的范围。

    【讨论】:

    • 非常非常感谢您先生,现在它工作正常,而且我会将我的两个项目修改为存储过程。再次感谢先生。
    • 不客气。如果这回答了您的问题,请将其标记为答案。它会帮助其他寻找相同答案的人。
    猜你喜欢
    • 1970-01-01
    • 2012-08-16
    • 2019-11-13
    • 2018-02-27
    • 2023-03-31
    • 2011-02-22
    • 1970-01-01
    • 2017-06-30
    • 2015-08-17
    相关资源
    最近更新 更多