跨站点,同域cookie混淆

时间:2013-07-02 17:35:02

标签: c# asp.net-mvc

我有一个在asp.net中完成的网站。另一个新的网站是在asp.net MVC,LINQ和Razor中完成的。

当我访问旧网站oldsite / default?userid = 243时,会设置cookie和会话变量。当我访问新网站oldsite时:88我打开了我的cookie查看器,看起来cookie仍然存在。

我现在正试图通过写出cookie的值来在新网站上测试它。

我试过这段代码:

@{ 
if (!(Request.Cookies["UserID"].Value == "")) 
{
    <span>Cookie: @Request.Cookies["UserID"].Value</span>
}
if (!(Session["UserID"].ToString() == ""))
{
    <span>Session: @Session["UserID"].ToString()</span>
}
}

但页面出错并且页面处于活动状态(因为我不能使用我的本地主机,因为域名会有所不同,因此cookie不会被转移。

如何告诉我新网站,如果此cookie不存在,请继续前进。否则,如果它确实存在,则写出它的值。我现在没有太多运气。

我需要检查它是否存在的原因是因为不是每个人都会通过旧网站使用新网站。有些人只是访问新网站,因此根本不会有或不需要cookie。

2 个答案:

答案 0 :(得分:2)

检查是否为空。您收到错误是因为您正在尝试读取不存在的cookie的Value属性。您可能会看到NullReferenceException

@{ 
if (Request.Cookies["UserID"] != null) 
{
    <span>Cookie: @Request.Cookies["UserID"].Value</span>
}
}

顺便说一下,要设置您的开发环境以与其他环境共享Cookie,请修改您的主机文件并映射您域的子目录:

C:\ Windows \ System32下\驱动程序\等\主机

127.0.0.1 dev.mydomain.com

在本地IIS中添加绑定到该域。

现在,当您浏览dev.mydomain.com时,您将加载您的localhost站点,但具有子域的安全限制,这意味着您可以共享cookie。

答案 1 :(得分:0)

一个选项是在访问值之前检查cookie名称是否存在:而不是使用索引,该索引将为您提供“未找到密钥”或缺少值的null值,请检查Cookies.AllKeys是否包含密钥你有兴趣。

MSDN链接Request.Cookies(包含使用AllKeys的示例)和HttpCookieCollection.AllKeys

if(Request.Cookies.AllKeys
    .Contains("UserID", StrngComparer.StringComparer.OrdinalIgnoreCase))...
相关问题