cookie 保存信息的问题

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

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

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

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

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

求解答或者代码也行...
...全文
185 17 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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,243

社区成员

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

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

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

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