C# 防止同一个账号多次登录(cache方法)

c#中防止同一账号重复登录的方法有不少,比如用数据库来记录用户登录情况、用Application来保存用户登录信息、用Cache来保存信息等。

本文为大家介绍如何利用缓存Cache方便地实现此功能。 

Cache与Session这二个状态对像的其中有一个不同之处,Cache是一个全局对象,作用的范围是整个应用程序,所有用户;
而Session是一个用户会话对象,是局部对象,用于保存单个用户的信息。 

只要把每次用户登录后的用户信息存储在Cache中,把Cache的Key名设为用户的登录名,Cache的过期时间设置为Session的超时时间,在用户每次登录的时候去判断一下Cache[用户名]是否有值,如果没有值,证明该用户没有登录,否则该用户已登录。

为大家举一个例子吧。

 

/// <summary>
/// 防止多次登录
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Button1_Click(object sender, System.EventArgs e)
{
string strUser = string.Empty;
string strCacheKey = this.TextBox1.Text;

strUser = Convert.ToString(Cache[strCacheKey]);

if (strUser == string.Empty)
{
TimeSpan SessTimeOut = new TimeSpan(0, 0, System.Web.HttpContext.Current.Session.Timeout, 0, 0);

Cache.Insert(strCacheKey, strCacheKey, null, DateTime.MaxValue, SessTimeOut, CacheItemPriority.NotRemovable, null);
Session["User"] = strCacheKey;
this.Label1.Text = Session["User"].ToString();
}
else
{
this.Label1.Text = "这个用户已经登录!";
}
}

 

大家可以把上面代码用在自己的程序中,检测一下,有效防止同一账号的重复登录。

转载于:https://www.cnblogs.com/zhangzhixiong/p/4975015.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现防止同一账号在同一时间重复登录同一网站,并且在浏览器关闭时自动退出登录,可以结合使用 Session 和 Cookie 来实现。 1. 在用户登录成功后,将用户的唯一标识(如用户名、用户ID等)存储到 Session 中,并生成一个随机的令牌(token)作为用户的身份标识。 2. 将该令牌存储到一个全局的数据结构(如 Dictionary 或数据库),以便在后续的请求中进行验证。 3. 将该令牌存储到一个 HttpOnly 的 Cookie 中,并设置过期时间。 4. 在每个页面的 Page_Load 方法中,验证 Session 中的身份令牌和 Cookie 中的令牌是否一致,如果不一致,则表示用户在其他地方登录,可以执行相关操作(如强制退出、提示用户等)。 5. 当浏览器被关闭时,由于 Cookie 设置了过期时间,该 Cookie 将被自动删除。在下次用户访问网站时,由于没有有效的身份令牌,用户将被视为未登录状态。 下面是一个简单的示例代码: ```csharp // 用户登录成功后的代码 string username = "用户名"; // 将实际的用户名替换为登录时获取的用户名 string token = Guid.NewGuid().ToString(); // 生成一个随机的令牌 // 存储用户信息到 Session Session["LoggedInUser"] = username; Session["AuthToken"] = token; // 存储用户令牌到全局的数据结构(如 Dictionary 或数据库) // 这里使用全局的 Application 对象来存储用户令牌 Dictionary<string, string> userDictionary = (Dictionary<string, string>)Application["UserDictionary"]; userDictionary[token] = username; // 将用户令牌存储到 Cookie,并设置过期时间 HttpCookie authCookie = new HttpCookie("AuthToken", token); authCookie.Expires = DateTime.Now.AddMinutes(30); // 设置过期时间,自行调整 authCookie.HttpOnly = true; // 设置 HttpOnly,防止被 JavaScript 访问 Response.Cookies.Add(authCookie); // 其他处理... // 重定向到需要跳转的页面 Response.Redirect("WebForm1.aspx"); ``` 在每个页面的 Page_Load 方法中验证身份令牌和 Cookie: ```csharp // 页面加载时的代码 protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { if (Session["LoggedInUser"] != null && Session["AuthToken"] != null) { string loggedInUser = Session["LoggedInUser"].ToString(); string authToken = Session["AuthToken"].ToString(); // 获取 Cookie 中的令牌 HttpCookie authCookie = Request.Cookies["AuthToken"]; if (authCookie != null && authCookie.Value == authToken) { // 令牌一致,用户已登录 // 继续正常处理... } else { // 令牌不一致,可能是在其他地方登录了 // 执行相关操作(如强制退出、提示用户等) // 其他处理... // 重定向到登录页面或其他页面 Response.Redirect("Login.aspx"); } } else { // 用户未登录 // 其他处理... // 重定向到登录页面或其他页面 Response.Redirect("Login.aspx"); } } } ``` 请注意,上述代码仅为示例,实际应用中可能需要进行更多的错误处理和安全验证。另外,为了保证数据的一致性和安全性,可能需要考虑使用线程安全的集合(如 ConcurrentDictionary)来存储用户信息,并加入适当的过期机制来清理过期的用户信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值