从Javascript访问服务器端创建的cookie
我已经创建了一个usercontrol,我在整个应用程序中使用它来在会话超时时自动注销用户。为此,我使用了一个cookie变量。 我需要在回发发生后重置cookie变量,因为这意味着用户处于活动状态。以下代码位设置将保存到cookie“express”中的到期时间 我使用以下javascript代码在客户端计时器中从服务器端检索cookie集,该计时器会持续检查会话是否过期从Javascript访问服务器端创建的cookie,javascript,c#,asp.net,session,cookies,Javascript,C#,Asp.net,Session,Cookies,我已经创建了一个usercontrol,我在整个应用程序中使用它来在会话超时时自动注销用户。为此,我使用了一个cookie变量。 我需要在回发发生后重置cookie变量,因为这意味着用户处于活动状态。以下代码位设置将保存到cookie“express”中的到期时间 我使用以下javascript代码在客户端计时器中从服务器端检索cookie集,该计时器会持续检查会话是否过期 <script type="text/javascript"> var timeRefresh; var ti
<script type="text/javascript">
var timeRefresh;
var timeInterval;
var currentTime;
var expressTime;
expressTime = "<%=ExpressDate %>";
currentTime = "<%=LoginDate %>";
//setCookie("express", expressTime);
timeRefresh = setInterval("Refresh()", 10000);
// Refresh this page to check session is expire or timeout.
function Refresh() {
var current = getCookie("express");
alert(current);
}
// Retrieve cookie by name.
function getCookie(name) {
var arg = name + "=";
var aLen = arg.length;
var cLen = document.cookie.length;
var i = 0;
while (i < cLen) {
var j = i + aLen;
if (document.cookie.substring(i, j) == arg) {
return getCookieVal(j);
}
i = document.cookie.indexOf(" ", i) + 1;
if (i == 0) break;
}
return;
}
function getCookieVal(offSet) {
var endStr = document.cookie.indexOf(";", offSet);
if (endStr == -1) {
endStr = document.cookie.length;
}
return unescape(document.cookie.substring(offSet, endStr));
}
然后像这样尝试从javascript访问它
function Refresh()`
{
var current = '<%=Session["expiry"].ToString()%>'
alert(current) // This always return the first value assigned during page load
}`
函数刷新()`
{
var电流=“”
alert(current)//这始终返回页面加载期间分配的第一个值
}`
非常感谢您提供的任何帮助您有两种cookie,仅限服务器或两者兼有 HttpCookie具有HttpOnly属性。只需将其设置为false 获取或设置一个值,该值指定客户端脚本是否可以访问cookie 编辑 调试的一种简单方法是查看开发人员控制台内部并与字符串进行比较
我怀疑
路径可能会造成问题。当您将path
设置为/somepath/
时,只有在具有/somepath/
的请求上才能在客户端访问cookie
比如说,
您正在请求一个页面http://example.com/somepath/login
并在服务器上设置cookies,路径值为/somepath/login
下次,您将重新访问一个页面http://example.com/otherpath/done
并尝试在客户端访问cookie。由于您在服务器上的路径/somepath/login
中设置了cookie,因此您将无法通过此请求获取这些cookie
因此,请确保您已为Cookie设置了正确的路径,或者不要设置为使其成为/
,并且此路径上设置的Cookie可以在同一域下的所有请求中访问http://example.com
找到了丢失的那块。将路径设置为“/”是正确的
我只需要将创建的cookie添加到响应中,因为只有在这之后,下一个请求才能访问回发之前创建的cookie
这就是我所做的
HttpCookie cookie = HttpContext.Current.Request.Cookies["express"];
if (cookie == null)
{
cookie = new HttpCookie("express");
}
cookie.HttpOnly = false;
cookie.Path = "/";
cookie.Values["express"] = ExpressDate;
Response.Cookies.Add(cookie);
感谢大家FYI,cookie.HttpOnly的默认值为false
@JaganathanBantheswaran,则表示问题是前端或cookie.Path=“/”;实际上,我没有定义路径。但它仍然无法从客户端找到cookie,无法将路径设置为'/'
function Refresh()`
{
var current = '<%=Session["expiry"].ToString()%>'
alert(current) // This always return the first value assigned during page load
}`
cookie.HttpOnly = false; //default value
HttpCookie cookie = HttpContext.Current.Request.Cookies["express"];
if (cookie == null)
{
cookie = new HttpCookie("express");
}
cookie.HttpOnly = false;
cookie.Path = "/";
cookie.Values["express"] = ExpressDate;
Response.Cookies.Add(cookie);