首页 新闻 赞助 找找看

ASP.NET HttpCookie 丢失的问题

0
悬赏园豆:100 [已关闭问题] 关闭于 2012-07-09 18:10

同一站点下保存的Cookie,在有的电脑上能在其他页面上获取到,有的电脑上获取为空是什么问题啊???

还有有时候登录后,会出现在有的页面上能获取到Cookie,有的页面上获取不到,都是在同一站点下,但是过一会可能就能用了,不知道是不是服务器的问题?

问题补充: Cookie找不到的原因我找到了,遍历Cookies集合发现第1个Cookie名前面自动加上“, ”,有的电脑能取到是第1个Cookie不是我要的Cookie,不能取到的电脑就是我要找的Cookie排在了第1位自动在前面加上了“, ”,但我在本地的站点遍历又没有自动加上“, ”,有人知道在服务器上怎么不自动加上“, ”,
飒沓如流星的主页 飒沓如流星 | 初学一级 | 园豆:5
提问于:2010-12-22 16:54
< >
分享
所有回答(3)
0

 提供一个测试方法,当你设置cookie值后,在要操作的页面地址栏输入javascript:alert(document.cookie);

看下在这个页面是否存在cookie值,这样慢慢排除。

盗贼 | 园豆:255 (菜鸟二级) | 2010-12-22 17:13
我那Cookie是登录后保存的用户ID,其他页面没获取到Cookie就返回登录页面了
支持(0) 反对(0) 飒沓如流星 | 园豆:5 (初学一级) | 2010-12-22 17:16
0

理想的方法就是session和Cookie结合使用;

这样就不会丢失了; 

就像我们在编写的时候在本地使用session是看不出问来,当发布到服务器上就会出现大问题,经常丢失数据,本身来说session也是有问题的;

所以Cookies的结合使用,个人认为是最好的方式 

下面是本人是使用的方法, 欢迎大家拍砖

CookiesSession类文件:

/// <summary>
/// 写入Cookies
/// </summary>
/// <param name="cookiesname">Cookie 名称</param>
/// <param name="dt">释放时间</param>
/// <param name="value">对象</param>
public static void WriteCookies(string cookiesname, DateTime dt, object value)
{
HttpCookie aCookie
= new HttpCookie(cookiesname);
//把对象序列化成string 进行保存
string strValue = AppSeriaLize.SerializeToString(value);
aCookie.Value
= HttpContext.Current.Server.UrlEncode(strValue);
aCookie.Expires
= dt;
HttpContext.Current.Response.Cookies.Add(aCookie);
}
/// <summary>
/// 写入Cookies
/// </summary>
/// <param name="cookiesname">Cookie 名称</param>
/// <param name="value">对象</param>
public static void WriteCookies(string cookiesname, object value)
{
HttpCookie aCookie
= new HttpCookie(cookiesname);
//把对象序列化成string 进行保存
string strValue = AppSeriaLize.SerializeToString(value);
aCookie.Value
= HttpContext.Current.Server.UrlEncode(strValue);
HttpContext.Current.Response.Cookies.Add(aCookie);
}
/// <summary>
/// 获取值
/// </summary>
/// <param name="cookiesname">Cookie 名称</param>
/// <returns></returns>
public static object GetCookies(string cookiesname)
{

if (HttpContext.Current.Request.Cookies[cookiesname] != null)
{
HttpCookie aCookie
= HttpContext.Current.Request.Cookies[cookiesname];
//string反序列化成 一个对象
return AppSeriaLize.DeserializeFromString(HttpContext.Current.Server.UrlDecode(aCookie.Value));
}
else
{
return null;
}
}

 

调用:CookiesSession 文件的方法

/// <summary>
    /// 登录人信息
    /// </summary>
    public User  Admin
    {
        get
        {
            if (Session["Cookie 名称"] != null)
            {
                Session["Cookie 名称"] = (User)Session["Cookie 名称"];
                return (User)Session["Cookie 名称"];
            }
            else
            {
                object user= CookiesSession.GetCookies("Cookie 名称");
                if (person != null)
                {
                    return (User) user
                }
            }
            return null;
        }
        set
        {
            CookiesSession.WriteCookies("Cookie 名称", value);
            Session["Cookie 名称"] = value;
        }

    }



 

 
po~饭盒 | 园豆:231 (菜鸟二级) | 2010-12-23 13:50
0

你添加Add同样键值时就是加上了,你去网上看看cookies使用方法,就知道了,
http://www.cnblogs.com/jembai/archive/2009/02/14/1390513.html,给你这个学习下吧

rains | 园豆:860 (小虾三级) | 2011-01-18 14:17
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册