我正在尝试对网页进行“获取”,并传入存储在我的Cookie中的ID列表。我的假设是可以从我的请求中获取带有列表的cookie。但是,我没有像我期望的那样在服务器端获得cookie。我只获得一个“用户”cookie,但不包含我的信息。
我想尽量避免在URL中实际传递这些值,因为我试图保持尽可能干净和漂亮的URL。但是,如果以任何其他方式无法实现,那么我仍然可以做到。
添加cookie:
function setCookie(name, value) {
var today = new Date();
today.setTime(today.getTime());
var expires = 30 * 1000 * 60;
var c_name = name;
var exdate = new Date(today.getTime() + (expires));
document.cookie = c_name + "=" + value + ";expires=" + exdate.toGMTString();
}
在jQuery中获取新页面:
document.location.href = href;
在我的行动方法中:
if (Request.Cookies != null)
{
var myCookie = Request.Cookies[cookieName];
}
//myCookie is always null
我添加的cookie不应该仍然可以在请求中访问吗?
编辑:
当我现在使用FireBug和FireCookie时,我可以看到cookie没有随请求传递。所以问题是我在添加cookie时是否做错了什么?
答案 0 :(得分:1)
我无法访问cookie的原因是因为cookie路径。当我通过FireCookie查看时,路径是唯一与请求中可访问的cookie不匹配的东西。
可访问的那个看起来像这样:
Path: "/"
和我想要访问但却无法访问的那个,看起来像这样:
Path: "/{projectName}/{controller}/{action}"
所以,当我现在保存我的cookie时,我将其改为:
document.cookie = c_name + "=" + value + ";expires=" + exdate.toGMTString();
改为:
document.cookie = c_name + "=" + value + ";Path=/;expires=" + exdate.toGMTString();
然后一切顺利。
答案 1 :(得分:0)
嗯。如何通过调用处理程序在服务器端创建cookie?
// on CookieHandler.ashx
HttpCookie myCookie = new HttpCookie("Your Data");
Response.Cookies.Add(myCookie);
并且在您的javascript方法中,您可以使用XmlHttpRequest对象或JSON调用来调用您的cookie处理程序。
function setCookie(name, value){
var cookieQuery= 'AppCode/cookieHandler.ashx?name='+name+'&value='+value;
var xmlhttp;
if (window.XMLHttpRequest) {
// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp = new XMLHttpRequest();
}
else
if (window.ActiveXObject) {
// code for IE6, IE5
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else {
alert("Your browser does not support XMLHTTP!");
}
xmlhttp.onreadystatechange = function() {
if (xmlhttp.readyState == 4) {
// Do Something
//alert(xmlhttp.responseText);
}
}
xmlhttp.open("GET", cookieQuery, true);
xmlhttp.send(null); // Sends the request to the server.
}
希望这会有所帮助。