2

我有一个在 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。

4

2 回答 2

2

检查是否为空。你得到一个错误是因为你试图读取Value一个不存在的 cookie 的属性。您可能会看到一个NullReferenceException.

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

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

c:\windows\system32\drivers\etc\hosts

127.0.0.1 dev.mydomain.com

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

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

于 2013-07-02T17:45:14.827 回答
0

一种选择是在访问值之前检查 cookie 名称是否存在:而不是使用索引,这将给您“找不到键”或null缺失值的值,检查是否Cookies.AllKeys包含您感兴趣的键。

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

if(Request.Cookies.AllKeys
    .Contains("UserID", StrngComparer.StringComparer.OrdinalIgnoreCase))...
于 2013-07-02T17:56:55.200 回答