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
转载请注明出处。
本站部分内容来源于网络,如侵犯到您的权益,请 联系我