Cookie还是有问题

Nesta_13 2007-11-01 01:55:50
就象一般论坛那样,你登录可以选择Cookie有效期为不保存,一天,一周....
现在我的问题是,如果有很多个用户都登录了这个论坛,然后都选择了Cookie有效期
请问:
1.怎么根据不同的用户创建Cookie
2.你登录的时候怎么判断是哪个用户的Cookie
3.还有就是怎么判断当前的Cookie过期没有
4.最后还有点问题就是,假如A用户登录了,选择了Cookie保存一天,然后注销了,这个Cookie是否还有效?如果注销了,然后又登录选择Cookie保存一周,又该怎么办?
请大家帮帮忙
给个例子看看!
...全文
166 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
jeremyyang824 2007-11-02
  • 打赏
  • 举报
回复

<div>
<asp:TextBox ID="txtUserName" runat="server"></asp:TextBox>
<asp:Button ID="btnLogin" runat="server" Text="登陆" OnClick="btnLogin_Click" /><br />

<asp:DropDownList ID="dropRemember" runat="server">
<asp:ListItem Value="0"> 不保存 </asp:ListItem>
<asp:ListItem Value="1"> 保存一天 </asp:ListItem>
<asp:ListItem Value="31"> 保存一月 </asp:ListItem>
<asp:ListItem Value="365"> 保存一年 </asp:ListItem>
</asp:DropDownList>
<br />
<asp:Label ID="lblShow" runat="server"></asp:Label>
</div>


string UserName;
protected void Page_Load(object sender, EventArgs e)
{ }
protected void btnLogin_Click(object sender, EventArgs e)
{
UserName = this.txtUserName.Text.Trim(); //取得用户名,用用户名来创建Cookie
if (Request.Cookies[UserName] == null || Request.Cookies[UserName].Value == string.Empty)
{
Response.Cookies[UserName].Value = UserName + "的用户信息";
Response.Cookies[UserName].Expires = DateTime.Now.AddDays(Convert.ToDouble(dropRemember.SelectedValue));
this.lblShow.Text = UserName + " 欢迎首次登陆!";
}
else
{
this.lblShow.Text = "您好 " + UserName + " 欢迎再次登陆!";
}
}
Nesta_13 2007-11-02
  • 打赏
  • 举报
回复
<asp:dropdownlist id= "dropRemember " runat= "server " >
<asp:ListItem Value= "0 " >不保存 </asp:ListItem >
<asp:ListItem Value= "1 " >保存一天 </asp:ListItem >
<asp:ListItem Value= "31 " >保存一月 </asp:ListItem >
<asp:ListItem Value= "365 " >保存一年 </asp:ListItem >
</asp:dropdownlist >

HttpCookie myCookie = new HttpCookie( "Login ");
myCookie.Values[ "UserName "] = txtUserName.Text.Trim();
myCookie.Values[ "Password "] = txtPassword.Text.Trim();
myCookie.Expires = DateTime.Now.AddDays(Convert.ToDouble(dropRemember.SelectedValue));
Response.Cookies.Add(myCookie);


上面是我用一个dropdownlist来选择的Cookie保存时间,但是始终不能实现多个用户在同一台机子上登录同一个论坛
Nesta_13 2007-11-02
  • 打赏
  • 举报
回复
不好意思问一下
1.怎么将用户名作为cookie键写入浏览器中?
2.如果超过20个怎么办?
jeremyyang824 2007-11-02
  • 打赏
  • 举报
回复
将用户名作为cookie键写入浏览器中,但注意一个站点最多只能在一个用户浏览器中写入20个Cookie
Nesta_13 2007-11-02
  • 打赏
  • 举报
回复
如果说多个用户在同一台机子上登录同一个论坛
我测试了一下:
A用户: 在一个论坛下 设置了保存Cookie一周 然后生成了一个Cookie在本地机子上
然后测试这个Cookie可用
B用户: 在同样一个论坛下 设置了不保存Cookie 然后我去Cookie保存目录下看,以前A用户的Cookie被删除了
B用户的Cookie也没有保存

现在我想问一下,怎么设置保存不同的Cookie实现多个用户在同一台机子上登录同一个论坛?
jeremyyang824 2007-11-02
  • 打赏
  • 举报
回复
是多个用户在同一台机子上登录同一个论坛
---------------------------------
如上,web程序只认浏览器。
所以多个用户在一台机器上登陆和一个用户在一台机器上登陆是一样的(反复登陆注销而已)
jeremyyang824 2007-11-02
  • 打赏
  • 举报
回复
1.Cookie是保存在客户端浏览器中的,不同的用户创建cookie是一样的 Response.Cookies["xxx"].Value = "xxxx";
客户选择的保存期限不同,则给与cookies不同的过期时间 Response.Cookies["xxx"].Expires = 时间;

2.通过Cookie本身来判断是哪个浏览器,客户实际上就是浏览器. 这个Cookie来自哪个浏览器就是来自哪个客户。

3.过期的Cookie就消失了,所以
if (Request.Cookies["xxx"] == null)则可能没创建,也可能过期了,但对于web程序来说都一样。

4.一般如果注销了,则把cookies取消,做法是设置过期时间为一个过去的时间
如:Response.Cookies["xxx"].Expires = DateTime.Now.AddDays(-1); 如上,过期了就消失了
如果又登陆了而且选择了一周,那么再创建Cookie,过期时间为一周,就和普通登陆一样
Nesta_13 2007-11-02
  • 打赏
  • 举报
回复
补充一句:
是多个用户在同一台机子上登录同一个论坛!!!!!!!!!!!!!!!!!!
Nesta_13 2007-11-02
  • 打赏
  • 举报
回复
是该好好检查下自己的代码
先结帖
maybeleo 2007-11-02
  • 打赏
  • 举报
回复
我也作了个论坛 和楼主的方法一样的
要想做的很经典的话
要好好的把程序重新审视一遍了
Nesta_13 2007-11-02
  • 打赏
  • 举报
回复
不知道怎么回事情?
还是不行
jeremyyang824 2007-11-02
  • 打赏
  • 举报
回复
string Login = this.txtUserName.Text + "的用户信息 "; --> string Login = this.txtUserName.Text.Trim();
Nesta_13 2007-11-02
  • 打赏
  • 举报
回复
是呀
我把生成Cookie的写在一个事件里,就是一个登录的Button
然后把使Cookie过期的写在了注销事件里
protected void btnIsPost_Click(object sender, EventArgs e)
{
string UserName = this.txtUserName.Text.Trim();
if (Request.Cookies[UserName] == null || Request.Cookies[UserName].Value == string.Empty)
{
Response.Cookies[UserName].Value = UserName + "的用户信息";
Response.Cookies[UserName].Expires = DateTime.Now.AddDays(Convert.ToDouble(ddlCookie.SelectedValue));
}
else
{
Page.RegisterStartupScript("", "<script>alert('您已经登录过')</script>");
return;
}
}

protected void lnkbtnlogout_Click(object sender, EventArgs e)
{

string Login = this.txtUserName.Text + "的用户信息";
Response.Cookies[Login].Expires = DateTime.Now.AddDays(-366);

FormsAuthentication.SignOut();
Response.Redirect("Logining.aspx");
}
jeremyyang824 2007-11-02
  • 打赏
  • 举报
回复
Response.Cookies[A].Expires = DateTime.Now.AddDays(-100); 这句话写在用户注销的事件里面。
如果用户不注销,该Cooikes就一直存在。

因为web是无状态的,web端无法自动判断用户是否在线,只能由用户触发一个事件,告诉web"我下线了"。
Nesta_13 2007-11-02
  • 打赏
  • 举报
回复
非常感谢!!!!!!!!!!!!
不过我还有点问题

就是我选择了 用户A 第一次选择Cookie保存为一天 没有注销
第二次选择Cookie保存为一周 提示已经登录


现在的问题是 我按照你的 Response.Cookies[A].Expires = DateTime.Now.AddDays(-100);
怎么不能使Cookie失效??
Nesta_13 2007-11-01
  • 打赏
  • 举报
回复
怎么没有人来回答?

62,041

社区成员

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

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

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

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