Cookie存取问题 本帖最后由 waCtr 于 2012-03-06 09:54:32 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 难道是我没表达清楚??当用户选择复选框登录进去后 然后又注销 再次换个账户登录 这时cookie 不是空的if (Cookie == null)就直接进CookiesHelper.SetCookie("UserInfo", "uName", uName);那么我别的页面需要取cookie值的 就取不到了string Name = HttpUtility.UrlDecode(Request.Cookies["UserInfo"].Values["uName"]);为空 有没有办法解决这类问题啊? function SetCk(){ if(document.getElementById("cbread").checked==true) { SetCookie(document.getElementById("tbLogName").value,document.getElementById("tbpwd").value); }}//写cookies函数function SetCookie(name,value){ var Days = 30; var exp = new Date(); exp.setTime(exp.getTime() + Days*24*60*60*1000); document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();}function getCookie(name)//取cookies函数 { var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)")); if(arr != null) return unescape(arr[2]); return null;}function GetPwd(){ if(getCookie(document.getElementById("tbLogName").value)!=null) { document.getElementById("tbpwd").value=getCookie(document.getElementById("tbLogName").value); }} 取Cookie一般使用System.Web.HttpContext.Current.Request.Cookies[cookieName]加Cookie一般是System.Web.HttpContext.Current.Response.Cookies.Add() 我就是这么写的啊 public static void AddCookie(HttpCookie cookie) { HttpResponse response = HttpContext.Current.Response; if (response != null) { //指定客户端脚本是否可以访问[默认为false] cookie.HttpOnly = true; //指定统一的Path,比便能通存通取 cookie.Path = "/"; //设置跨域,这样在其它二级域名下就都可以访问到了 //cookie.Domain = "chinesecoo.com"; response.AppendCookie(cookie); } }/// <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; }现在的问题是用户第一次登录 这里没错 可以添加cookieif (Cookie == null){添加cookie这里执行}第二次登录 用户可以直接点登录的 因为第一次登录时已经记住账号和密码了但是用户想换个账号登录 这时登录时if (Cookie == null)//它就不为空了那么就没添加cookie了所有其他画面就取不到cookie了 就算取到 也是之前的账号 并不是这次登录的 现在的问题是当cooki的值(uName)不一样时 应该处理是 替换之前的cookie 或者从新设置cookie/// <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); } } }现在这段代码貌似不起作用 其他画面取出来的cookie是nullstring Name = HttpUtility.UrlDecode(CookiesHelper.GetCookie("UserInfo").Values["uName"]);求解!!! 本帖最后由 net_lover 于 2012-03-06 11:24:00 编辑 这个问题 可以这么解决了 但是又有个新问题了 当用户不打钩时(记住密码) 怎么将cookie添加进去?如果不添加的话 后面的程序中 还需要从cookie中取uNmae 就取不到了 你知道打勾的意义吗?打勾了,你需要设置Cookie.Expires时间,不打勾,就不用设置,跟是否添加没关系 HttpCookie Cookie = CookiesHelper.GetCookie("UserInfo"); //有cookie值的话就取出来 if (Cookie != null) { this.txtUserName.Value = HttpUtility.UrlDecode(Cookie.Values["uName"]); this.txtPwd.Attributes.Add("value", Cookie.Values["Pwd"]); }那这里 Cookie!=null的 没打钩 也会给文本框赋值 没打钩 关闭浏览器Cookei就没有了,如果你的还有,说明你设置的有问题。如果你还搞不清楚,你可以把是否打勾也写到Cookei中,if(String.IsNullOrEmpty(Cookie.Values["打勾标记"])==false)this.txtPwd.Attributes.Add("value", Cookie.Values["Pwd"]); 用过flexiGrid插件的请进。 哪里有柱状图和饼图的控件下载啊???? 问一日期格式的表达式 请问水晶报表到底是什么?干什么用的? 各位大俠帮看一下 不知道错在什么地方 急问:为什么我的submit按钮没反应??? 多少钱? 一个正则表达式,在线等..... 调试aspnet程序时的错误 SOS!!!各位大虾请指点迷津吧,我快要崩溃了:( 为什么报错说:不包含“loadPageData”的定义? 初学asp.net,有个问题请教下各位
当用户选择复选框登录进去后 然后又注销 再次换个账户登录 这时
cookie 不是空的
if (Cookie == null)就直接进CookiesHelper.SetCookie("UserInfo", "uName", uName);那么我别的页面需要取cookie值的 就取不到了
string Name = HttpUtility.UrlDecode(Request.Cookies["UserInfo"].Values["uName"]);
为空
有没有办法解决这类问题啊?
{
if(document.getElementById("cbread").checked==true)
{
SetCookie(document.getElementById("tbLogName").value,document.getElementById("tbpwd").value);
}
}
//写cookies函数
function SetCookie(name,value)
{
var Days = 30;
var exp = new Date();
exp.setTime(exp.getTime() + Days*24*60*60*1000);
document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString();
}
function getCookie(name)//取cookies函数
{
var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));
if(arr != null) return unescape(arr[2]); return null;
}
function GetPwd()
{
if(getCookie(document.getElementById("tbLogName").value)!=null)
{
document.getElementById("tbpwd").value=getCookie(document.getElementById("tbLogName").value);
}
}
System.Web.HttpContext.Current.Request.Cookies[cookieName]加Cookie一般是
System.Web.HttpContext.Current.Response.Cookies.Add()
{
HttpResponse response = HttpContext.Current.Response;
if (response != null)
{
//指定客户端脚本是否可以访问[默认为false]
cookie.HttpOnly = true;
//指定统一的Path,比便能通存通取
cookie.Path = "/";
//设置跨域,这样在其它二级域名下就都可以访问到了
//cookie.Domain = "chinesecoo.com";
response.AppendCookie(cookie);
}
}
/// <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;
}现在的问题是
用户第一次登录 这里没错 可以添加cookie
if (Cookie == null)
{
添加cookie
这里执行
}
第二次登录 用户可以直接点登录的 因为第一次登录时已经记住账号和密码了
但是用户想换个账号登录 这时登录时
if (Cookie == null)//它就不为空了
那么就没添加cookie了所有其他画面就取不到cookie了 就算取到 也是之前的账号 并不是这次登录的
当cooki的值(uName)不一样时 应该处理是 替换之前的cookie 或者从新设置cookie
/// <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);
}
} }
现在这段代码貌似不起作用
其他画面取出来的cookie是null
string Name = HttpUtility.UrlDecode(CookiesHelper.GetCookie("UserInfo").Values["uName"]);
求解!!!
但是又有个新问题了 当用户不打钩时(记住密码) 怎么将cookie添加进去?
如果不添加的话 后面的程序中 还需要从cookie中取uNmae 就取不到了
不打勾,就不用设置,跟是否添加没关系
HttpCookie Cookie = CookiesHelper.GetCookie("UserInfo");
//有cookie值的话就取出来
if (Cookie != null)
{
this.txtUserName.Value = HttpUtility.UrlDecode(Cookie.Values["uName"]);
this.txtPwd.Attributes.Add("value", Cookie.Values["Pwd"]);
}
那这里 Cookie!=null的
没打钩 也会给文本框赋值
if(String.IsNullOrEmpty(Cookie.Values["打勾标记"])==false)
this.txtPwd.Attributes.Add("value", Cookie.Values["Pwd"]);