ASP.NET登录问题求解?

oldworm 2009-09-02 12:23:48
前提:使用asp.net的FormsAuthentication管理登录。
1、如何实现登录有效期为一天、一周、一月,当前进程?
2、如何实现第二个同名用户踢出第一个用户?
最好贴代码啊。

...全文
346 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
wuyq11 2009-09-02
  • 打赏
  • 举报
回复
FormsAuthentication.SetAuthCookie("", true);
HttpCookie hc= Context.Response.Cookies[FormsAuthentication.FormsCookieName];
hc.Expires = DateTime.Now.AddYears(1);


<authentication mode="Forms">
<forms loginUrl="/Login.aspx" timeout="10080" />
</authentication>

HugoWong 2009-09-02
  • 打赏
  • 举报
回复
FormsAuthentication.SetAuthCookie(MemberUserName, false);
HttpCookie lcookie = HttpContext.Current.Response.Cookies[FormsAuthentication.FormsCookieName];
lcookie.Domain = "your url";
HttpContext.Current.Response.Redirect("go to url", true);
homesos 2009-09-02
  • 打赏
  • 举报
回复
学习……
haihuan23 2009-09-02
  • 打赏
  • 举报
回复
学习
xzq686 2009-09-02
  • 打赏
  • 举报
回复

看看实例吧..从数据库到登录验证都有..说的就是你想要的..
http://i.cn.yahoo.com/zoulihu/blog/p_1/

lovexilove 2009-09-02
  • 打赏
  • 举报
回复
楼上真厉害!我也受教了
一品梅 2009-09-02
  • 打赏
  • 举报
回复
//SetLoginCookie方法
public static void SetLoginCookie(AdminUserVO u, string roles)
{
//建立身份验证票对象
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket (1,u.Uname, DateTime.Now, DateTime.Now.AddMinutes(30), false,roles,"/");
//加密序列化验证票为字符串
string hashTicket = FormsAuthentication.Encrypt (ticket) ;
HttpCookie userCookie = new HttpCookie(FormsAuthentication.FormsCookieName, hashTicket);
HttpContext.Current.Response.Cookies.Add(userCookie);
}


FormsAuthenticationTicket ticket = new FormsAuthenticationTicket (1,u.Uname, DateTime.Now, DateTime.Now.AddMinutes(30), false,roles,"/");
是否持久化COOKIES
jerry_zuo 2009-09-02
  • 打赏
  • 举报
回复
楼上 正解。
一品梅 2009-09-02
  • 打赏
  • 举报
回复
public static void RedirectFromLoginPage( string userName, bool createPersistentCookie, string strCookiePath );


createPersistentCookie
一品梅 2009-09-02
  • 打赏
  • 举报
回复
<system.web> 
<authentication mode="Forms" >
<forms name=".yaoCookies" loginUrl="/duan/Manage/login.aspx" protection="All"
timeout="需要的时间" path="/" />
</authentication>
</system.web>
oldworm 2009-09-02
  • 打赏
  • 举报
回复

一堆人答非所问!
hechenqingtian 2009-09-02
  • 打赏
  • 举报
回复
你说的就是单点登录问题,这个问题的解决方案说法不一,asp.net中使用哪个集成安全验证可以实现的
End 2009-09-02
  • 打赏
  • 举报
回复
2楼的太强了 学习到了
Lovely_baby 2009-09-02
  • 打赏
  • 举报
回复
问题一 :可以使用cookies设置不同的保存时间 即可
问题二 :你要在数据库中再建一张登陆状态表 同一时间同一用户只能登陆一个
lovnov 2009-09-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 only_endure 的回复:]
XML code<system.web><authenticationmode="Forms"><formsname=".yaoCookies" loginUrl="/duan/Manage/login.aspx" protection="All"
timeout="需要的时间" path="/"/></authentication></system.web>
[/Quote]

晕哦,如果这样服务器长时间连接用户占这connection pool不能释放资源。
服务器默认20分钟的session时间是有原因的。

如果要保存登录状态那只能用cookie了。
HttpCookie c = new HttpCookie("user_realname", “YourName”);
c.Expires = DateTime.Now.AddDays(7);
Response.Cookies.Add(c);
PSSonyXbox 2009-09-02
  • 打赏
  • 举报
回复
几乎全解
fuzijing 2009-09-02
  • 打赏
  • 举报
回复
...
sayluyun 2009-09-02
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 only_endure 的回复:]
C# code//SetLoginCookie方法publicstaticvoid SetLoginCookie(AdminUserVO u,string roles)
{//建立身份验证票对象 FormsAuthenticationTicket ticket=new FormsAuthenticationTicket (1,u.Uname, DateTime.Now, DateTime.Now.AddMinutes(30),false,roles,"/");//加密序列化验证票为字符串string hashTicket= FormsAuthentication.Encrypt (ticket) ;
HttpCookie userCookie=new HttpCookie(FormsAuthentication.FormsCookieName, hashTicket);
HttpContext.Current.Response.Cookies.Add(userCookie);
}
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket (1,u.Uname, DateTime.Now, DateTime.Now.AddMinutes(30),false,roles,"/");
是否持久化COOKIES
[/Quote]
UP
lfywy 2009-09-02
  • 打赏
  • 举报
回复
找到一个解决办法:

原理是在session中保存LastLoginDate的时间值。操作时再跟提取的Membership.GetUser().LastLoginDate值进行比较,如果不一样就把这个登录注销掉。这样就保证只有以这个账户最后登录的用户,之前登录的都被注销掉。



具体做法是使用login控件登录,login控件名称是Login1,添加Login1_LoggedIn事件:


Code Snippet
protected void Login1_LoggedIn(object sender, EventArgs e)
{
Session["mySessionTime"] = Membership.GetUser(Login1.UserName).LastLoginDate;
}







然后我是在master页面的Page_Load事件中判断:


Code Snippet
protected void Page_Load(object sender, EventArgs e)
{
if (Session["mySessionTime"] == null || Membership.GetUser() == null || (DateTime)Session["mySessionTime"] != Membership.GetUser().LastLoginDate)
{
FormsAuthentication.SignOut();
}
}

看似没有什么问题,请各位看看有没有漏洞或有没有其他更好的办法。
cheng_feng001 2009-09-02
  • 打赏
  • 举报
回复
2、如何实现第二个同名用户踢出第一个用户?

这个需要自己写代码实现,.NET没有帮你做这个哦,这些都做完了,那要我们干什么吃的
加载更多回复(10)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧