.net实现网站用户登录认证

前端技术 2023/09/02 .NET

cookie登录后同域名下的网站保持相同的登录状态。

登录

private void SetAuthCookie(string userId, bool createPersistentCookie)
{
  var ticket = new FormsAuthenticationTicket(2, userId, DateTime.Now, DateTime.Now.AddDays(7), true, \"\", FormsAuthentication.FormsCookiePath);
  string ticketEncrypted = FormsAuthentication.Encrypt(ticket);

  HttpCookie cookie;
  if (createPersistentCookie)//是否在设置的过期时间内一直有效
  {
    cookie = new HttpCookie(FormsAuthentication.FormsCookieName, ticketEncrypted)
    {
      HttpOnly = true,
      Path = FormsAuthentication.FormsCookiePath,
      Secure = FormsAuthentication.RequireSSL,
      Expires = ticket.Expiration,
      Domain = \"cnblogs.com\"//这里设置认证的域名,同域名下包括子域名如aa.cnblogs.com或bb.cnblogs.com都保持相同的登录状态
    };
  }
  else
  {
    cookie = new HttpCookie(FormsAuthentication.FormsCookieName, ticketEncrypted)
    {
      HttpOnly = true,
      Path = FormsAuthentication.FormsCookiePath,
      Secure = FormsAuthentication.RequireSSL,
      //Expires = ticket.Expiration,//无过期时间的,浏览器关闭后失效
      Domain = \"cnblogs.com\"
    };
  }

  HttpContext.Current.Response.Cookies.Remove(FormsAuthentication.FormsCookieName);
  HttpContext.Current.Response.Cookies.Add(cookie);
}

这样登录后,在同域名下的任何页面都可以得到用户状态

判断用户是否登录

public bool IsAuthenticated
{
  get
  {
    bool isPass = System.Web.HttpContext.Current.User.Identity.IsAuthenticated;

    if (!isPass)
      SignOut();

    return isPass;
  }
}

得到当前的用户名

public string GetCurrentUserId()
{
   return _httpContext.User.Identity.Name;
}

下面给大家一个具体的实例

CS页代码:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;

public partial class Login : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}
protected void Button1_Click(object sender, EventArgs e)
{ 

string connString = Convert.ToString(ConfigurationManager.ConnectionStrings[\"001ConnectionString\"]);
//001ConnectionString是我在webconfig里配置的数据库连接。
SqlConnection conn = new SqlConnection(connString); 
string strsql = \"select * from User_table where User_name=\'\" + UserName.Text + \"\' and Password=\'\" + Password.Text + \"\'\";
SqlCommand cmd = new SqlCommand(strsql, conn);
conn.Open();
SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

if (dr.Read())
{ 
Response.Redirect(\"index.aspx\");
conn.Close();
}
else
{
FailureText.Text = \"登陆失败,请检查登陆信息!\";
conn.Close();
Response.Write(\"<script language=javascript>alert(\'登陆失败!.\');</script>\");
}
}

protected void Button2_Click(object sender, EventArgs e) //文本框重置按钮
{
UserName.Text = \"\";
Password.Text = \"\";

}
}

下面是aspx页面代码:

<%@ Page Language=\"C#\" AutoEventWireup=\"true\" CodeFile=\"Login.aspx.cs\" Inherits=\"Login\" %>

<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">

<html xmlns=\" http://www.w3.org/1999/xhtml\" >
<head runat=\"server\">
<title>无标题页</title>
</head>
<body>
<form id=\"form1\" runat=\"server\"> 
<asp:Panel ID=\"Panel1\" runat=\"server\" Height=\"101px\" Width=\"231px\" Wrap=\"False\">
<table>
<tr>
<td align=\"center\" colspan=\"2\">
用户登陆</td>
</tr>
<tr>
<td style=\"width: 89px\">
用户名:</td>
<td style=\"width: 100px\">
<asp:TextBox ID=\"UserName\" runat=\"server\" Wrap=\"False\"></asp:TextBox></td>
</tr>
<tr>
<td style=\"width: 89px\">
密码:</td>
<td style=\"width: 100px\">
<asp:TextBox ID=\"Password\" runat=\"server\" TextMode=\"Password\" Width=\"148px\" Wrap=\"False\" ></asp:TextBox></td>
</tr>
<tr>
<td align=\"center\" colspan=\"2\" style=\"text-align: center\">
<asp:Button ID=\"Button1\" runat=\"server\" Text=\"登陆\" Width=\"50px\" OnClick=\"Button1_Click\" />
<asp:Button ID=\"Button2\" runat=\"server\" Text=\"重置\" Width=\"50px\" OnClick=\"Button2_Click\" /></td>
</tr>
<tr>
<td align=\"center\" colspan=\"2\">
<asp:Label ID=\"FailureText\" runat=\"server\" Width=\"77px\"></asp:Label></td>
</tr>
</table>
</asp:Panel>

</form>
</body>
</html>

本文地址:https://www.stayed.cn/item/4822

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。