gpt4 book ai didi

javascript - 从 Javascript 访问在服务器端创建的 Cookie

转载 作者:行者123 更新时间:2023-11-30 15:35:25 24 4
gpt4 key购买 nike

我已经创建了一个用户控件,我在整个应用程序中都使用它来在发生 session 超时时自动注销用户。为此,我使用了一个 cookie 变量。一旦发生回发,我需要重置 cookie 变量,因为这意味着用户处于事件状态。以下代码位设置将保存到 cookie“express”的过期时间

DateTime date = DateTime.Now;
LoginDate = date.ToString("u", DateTimeFormatInfo.InvariantInfo).Replace("Z","");
int sessionTimeout = Session.Timeout;
dateExpress = date.AddMinutes(sessionTimeout);
ExpressDate = dateExpress.ToString("u", DateTimeFormatInfo.InvariantInfo).Replace("Z", "");

HttpCookie cookie = Request.Cookies["express"];
if (cookie == null)
{
cookie = new HttpCookie("express");
cookie.Path = "/somepath/";
cookie.Values["express"] = ExpressDate;
}
else
{
cookie.Values["express"] = ExpressDate;
}

我正在使用以下 javascript 代码在客户端定时器中检索从服务器端设置的 cookie,该定时器持续检查 session 是否过期

<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));
}

但我总是从客户端获取 cookie 的未定义值。

PS:我还尝试使用在服务器端创建的 session 变量并从 javascript 访问它,但即使它读取 session 值,它也只读取页面加载时分配的第一个值,我想在页面加载时获取 session 值下一次回发

我在 pageload() 中设置 session express

 Session["express"] = ExpressDate;

然后尝试像这样从 javascript 访问它

function Refresh()`
{
var current = '<%=Session["expiry"].ToString()%>'
alert(current) // This always return the first value assigned during page load
}`

非常感谢任何帮助

最佳答案

我怀疑 path可能会造成问题。当你设置 path/somepath/ cookie 只能在具有 /somepath/ 的请求中在客户端访问.

例如,

您正在请求页面 http://example.com/somepath/login并在服务器上设置 cookie,路径值为 /somepath/login .

下次,您将重新访问页面 http://example.com/otherpath/done并尝试在客户端访问 cookie。由于您在路径 /somepath/login 中设置了 cookie在服务器上,您不会通过此请求获得这些 cookie。

因此请确保您已为 cookie 设置了正确的路径,或者不设置它以使其变为 /并且在同一域下的所有请求中都可以访问此路径上设置的 cookie http://example.com .

关于javascript - 从 Javascript 访问在服务器端创建的 Cookie,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41628833/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com