cookie 保存信息的问题

aaa1810 2009-08-29 12:29:13
之前用的是Session

现在要改用cookie 之前没用过 有几个问题想咨询一下大家

类似于论坛登录的cookie cookie里保存用户名密码 访问的时候先判断cookie 里的用户名密码跟数据库里的是否一致

匹配之后才能访问 否则重新登录 但是网站中那么多页面 每访问一个页面都要去数据库里验证客户信息是否正确吗?

类似于CSDN的2周内不在登录一样

求解答或者代码也行...
...全文
182 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiechunmei13 2009-08-30
  • 打赏
  • 举报
回复
不是可以做母版吗?
将cookie放到母版中,其他页面也只是引用此母版。
只需要在母板页中判断一次。
cookie是客户端的。
不需要验证数据库。
aaa1810 2009-08-30
  • 打赏
  • 举报
回复
LS 提供的仅仅是保存用户名和密码在文本框中么?

我登录后访问其他页面时 修改了cookie中存储的密码 那么还可以继续以当前的角色访问其他页面吧?
woluge 2009-08-30
  • 打赏
  • 举报
回复
按LZ要求

if (!Page.IsPostBack)
{
HttpCookie Cookie = CookiesHelper.GetCookie("UserInfo");
if (Cookie != null && string.IsNullOrEmpty(Request["remUsername"]))
{
System.Collections.Specialized.NameValueCollection UserInfoCookieCollection = Request.Cookies["userInfo"].Values;
this.txtName.Text = UserInfoCookieCollection["uName"];
this.txtPwd.Attributes["value"] = UserInfoCookieCollection["uPwd"];
}
}

private void SetUpCookies()
{
//记住我的名字
if (!string.IsNullOrEmpty(Request["remUsername"]))//判断是否选择了记住密码
{
string uName = this.txtName.Text.Trim();
string uPwd = this.txtPwd.Text.Trim();
HttpCookie Cookie = CookiesHelper.GetCookie("UserInfo");
if (Cookie == null)
{
Cookie = new HttpCookie("UserInfo");
Cookie.Values.Add("uName", uName);
Cookie.Values.Add("uPwd", uPwd);
//设置Cookie过期时间
Cookie.Expires = DateTime.Now.AddDays(30);
CookiesHelper.AddCookie(Cookie);
}
else if (!Cookie.Values["uName"].Equals(uName) && !Cookie.Values["uPwd"].Equals(uPwd))
{
CookiesHelper.SetCookie("UserInfo", "uName", uName);
CookiesHelper.SetCookie("UserInfo", "uPwd", uPwd);

}
}
}

private class CookiesHelper
{

/// <summary>
/// 获得Cookie
/// </summary>
/// <param name="cookieName"></param>
/// <returns></returns>
public static HttpCookie GetCookie(string cookieName)
{
HttpRequest request = HttpContext.Current.Request;
if (request != null)
return request.Cookies[cookieName];
return null;
}

/// <summary>
/// 添加Cookie
/// </summary>
/// <param name="cookie"></param>
public static void AddCookie(HttpCookie cookie)
{
HttpResponse response = HttpContext.Current.Response;
if (response != null)
{
//指定客户端脚本是否可以访问[默认为false]
cookie.HttpOnly = true;
//指定统一的Path,比便能通存通取
cookie.Path = "/";
//设置跨域,这样在其它二级域名下就都可以访问到了
cookie.Domain = "pc5120.com";
response.AppendCookie(cookie);
}
}

/// <summary>
/// 设置Cookie子键的值
/// </summary>
/// <param name="cookieName"></param>
/// <param name="key"></param>
/// <param name="value"></param>
public static void SetCookie(string cookieName, string key, string value)
{
SetCookie(cookieName, key, value, null);
}

/// <summary>
/// 设置Cookie
/// </summary>
/// <param name="cookieName"></param>
/// <param name="key"></param>
/// <param name="value"></param>
/// <param name="expires"></param>
public static void SetCookie(string cookieName, string key, string value, DateTime? expires)
{
HttpResponse response = HttpContext.Current.Response;
if (response != null)
{
HttpCookie cookie = response.Cookies[cookieName];
if (cookie != null)
{
if (!string.IsNullOrEmpty(key) && cookie.HasKeys)
cookie.Values.Set(key, value);
else
if (!string.IsNullOrEmpty(value))
cookie.Value = value;
if (expires != null)
cookie.Expires = expires.Value;
response.SetCookie(cookie);
}
}

}
}
aaa1810 2009-08-30
  • 打赏
  • 举报
回复
LS 那么对于伪造的cookie是怎么处理呢?
别样苍茫 2009-08-30
  • 打赏
  • 举报
回复
这里涉及到cookies的读写技术 了解这些方法实质之后,LZ的问题就迎刃而解了
基本上是根据你在存储COOKIE的时候,指定KEY,读的时候,判断是否为空就可以
以下资料可以作为参考;

.Net基础:ASP.NET中cookie读写方法介绍
Cookie (HttpCookie的实例)提供了一种在 Web 应用程序中存储用户特定信息的方法。例如,当用户访问您的站点时,您可以使用Cookie 存储用户首选项或其他信息。当该用户再次访问您的网站时,应用程序便可以检索以前存储的信息。

ASP.NET中的cookie:创建Cookie方法 (1)

Response.Cookies["userName"].Value = “admin";
Response.Cookies[“userName”].Expires = DateTime.Now.AddDays(1);
//如果不设置失效时间,Cookie信息不会写到用户硬盘,浏览器关闭将会丢弃。

ASP.NET中的cookie:创建Cookie方法 (2)

HttpCookie aCookie = new HttpCookie(“lastVisit”);
//上一次访问时间
aCookie.Value = DateTime.Now.ToString();
aCookie.Expires = DateTime.Now.AddDays(1);
Response.Cookies.Add(aCookie);

ASP.NET中的cookie:访问Cookie方法(1)

if(Request.Cookies["userName"] != null)
Label1.Text = Server.HtmlEncode(Request.Cookies["userName"].Value);

访问Cookie方法(2)

if(Request.Cookies["userName"] != null) {
HttpCookie aCookie = Request.Cookies["userName"];
Label1.Text = Server.HtmlEncode(aCookie.Value);
}

ASP.NET中的cookie:创建多值Cookie方法 (1)

Response.Cookies["userInfo"]["userName"] = “admin";
Response.Cookies["userInfo"]["lastVisit"] = DateTime.Now.ToString();
Response.Cookies["userInfo"].Expires = DateTime.Now.AddDays(1);

ASP.NET中的cookie:创建多值Cookie方法 (2)

HttpCookie aCookie = new HttpCookie("userInfo");
aCookie.Values["userName"] = “admin";
aCookie.Values["lastVisit"] = DateTime.Now.ToString();
aCookie.Expires = DateTime.Now.AddDays(1);
Response.Cookies.Add(aCookie);

ASP.NET中的cookie:读取多值Cookie

HttpCookie aCookie = Request.Cookies["userInfo"];
string userName=aCookie.Values[“userName”];
string lastVisit=aCookie.Values[“lastVisit”];

ASP.NET中的cookie:修改和删除Cookie

不能直接修改或删除Cookie,只能创建一个新的Cookie,发送到客户端以实现修改或删除Cookie。
aaa1810 2009-08-30
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 rodger2008 的回复:]
将保存到cookie的值
做个加密处理
然后每次页面加载都做个验证处理!!
[/Quote]

怎么验证? 从数据库里验证?
cuike519 2009-08-30
  • 打赏
  • 举报
回复
Cookie里面不能保存密码。

Cookie只保存类似于票据的东西。
showjim 2009-08-29
  • 打赏
  • 举报
回复
Cookie一定要验证,还要加密,否则可以伪造
  • 打赏
  • 举报
回复
Cookie只是记忆,如果存在Cookie那么就可以直接登陆上来。但到了各个页面的话,用Session的话也仅仅是验证Session是否存在,不会去数据库取一遍用户名和密码出来验证一番,同理Cookie也是一样,验证是否存在即可。。
若不存在Request.Cookies[""]==null
则要求登录,若选择一个月内不再登录,则设置有效期即可Response.Cookies[""].Expires=DateTime.Now.AddMonths(1);
loweek 2009-08-29
  • 打赏
  • 举报
回复
cookie有效期的问题
huyou1983218 2009-08-29
  • 打赏
  • 举报
回复
FormAuthTick MS有专门的登录验证方案
rodgerluo 2009-08-29
  • 打赏
  • 举报
回复
将保存到cookie的值
做个加密处理
然后每次页面加载都做个验证处理!!
alan817 2009-08-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sbwwkmyd 的回复:]
Cookie一定要验证,还要加密,否则可以伪造
[/Quote]

同意,只判断为空是不够的,在httpmodule里面做验证
xuhaijin 2009-08-29
  • 打赏
  • 举报
回复
.................
chen_ya_ping 2009-08-29
  • 打赏
  • 举报
回复
其实楼主关于Cookie的操作,你可以去网上搜索一下资料。会得到更多的消息
lupanlupan 2009-08-29
  • 打赏
  • 举报
回复
function setCookie(name,value,hours){
var name = escape(name);
var value = escape(value);
var expires = new Date();
expires.setTime(expires.getTime() + hours*3600000);
_expires = (typeof hours) == "string" ? "" : ";expires=" + expires.toUTCString();
document.cookie = name + "=" + value + _expires /*+ path*/;
}
//获取cookie值
function getCookieValue(name){
var name = escape(name);
var allcookies = document.cookie;
name += "=";
var pos = allcookies.indexOf(name);
if (pos != -1){
var start = pos + name.length;
var end = allcookies.indexOf(";",start);
if (end == -1) end = allcookies.length;
var value = allcookies.substring(start,end);
return unescape(value);
}
else return "";
}
//删除cookie
function deleteCookie(name){
var name = escape(name);
var expires = new Date(0);
//path = path == "" ? "" : ";path=" + path;
document.cookie = name + "="+ ";expires=" + expires.toUTCString() /*+ path*/;
}


function init() {
document.getElementById("LoginIDTxt").focus();
if(getCookieValue("gisuserinfo") != ""){
var userInfos = getCookieValue("gisuserinfo").split(",");
if(userInfos.length = 2){
UserLogin(userInfos[0],userInfos[1],'N');
return;
}
}
}
aaa1810 2009-08-29
  • 打赏
  • 举报
回复
cookie里面保存的

如果是用户的ID之类的话 那么我是不是可以伪造一个用户ID呢??

62,071

社区成员

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

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

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

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