【发布时间】:2022-02-10 17:03:44
【问题描述】:
我尝试读取通过 jQuery 设置的 PHP 中的 cookie 值。 但在第一次页面加载时没有读取。但我看到它已经由 jQuery 设置,并且可以从 jquery 中读取相同的值。
当尝试从 PHP 读取该 cookie 值时,它不会在页面第一次呈现时显示该值。但是再次刷新页面,它给出了来自 php 的值。(我需要刷新页面 2 次才能获得正确的值)
我同时使用了 head 标签和 onload 方法来放置 setCookie() 函数。但结果是一样的。
我使用this jQuery 库来编写cookie。
这是我用来读写 cookie 的代码。
<?php
if (!isset($_SESSION)) {
session_start();
}
?>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<style>
body{
background: #666666;
}
</style>
<script src="js/jquery.min.js" type="text/javascript"></script>
<script src="js/jquery.cookie.js" type="text/javascript">/script>
<script>
setCookie();
function setCookie() {
console.log('on Load');
var data_spl = $(location).attr('href').split('#?camlist=')[1];
if (data_spl != undefined) {
var len = data_spl.split(',').length;
$.cookie("len", len);
console.log($.cookie("len"));
} else {
console.log('undefined');
}
}
</script>
</head>
<body>
<?php
for ($i = 0; $i < 100; $i++) {
echo "<script>console.log('START');</script>";
echo "<script>console.log('" . $_COOKIE['len'] . "');</script>";
echo $_COOKIE['len'];
echo "<script>console.log('END');</script>";
}
echo "WIDTH & HEIGHT :" . $_SESSION['width_x'] . "-" . $_SESSION['height_y'];
?>
</body>
</html>
已编辑:
我使用另一个 php 页面来设置来自 java 脚本的会话值,并通过 jQuery 调用该页面,如下所示。
var len = $(location).attr('href').split('#?data=')[1].split(',').length;
$.post('set_session.php', {params: len}, function (retparams) {
if (retparams.has) {
console.log('sucessfuly sent the paramlen!');
} else {
alert("can't read camarauids for grid making");
}
}, 'retparams');
set_session.php
<?php
if (session_status() == PHP_SESSION_NONE) {
session_start();
$_SESSION['urllen'] = 0;
}
if (isset($_POST['params'])) {
$_SESSION['urllen'] = $_POST['params'];
echo json_encode(array('retparams' => 'has'));
echo json_encode(array('datalen' => $_SESSION['urllen']));
} else {
echo json_encode(array('retparams' => 'error'));
}
?>
然后我尝试从 index.php 页面读取会话值 ($_SESSION['urllen'])。但这也和上面一样。(我需要再刷新一次页面才能获得从 jQuery post 函数设置的正确值。)
【问题讨论】:
-
由于客户端和服务器端代码不同,第一次加载页面时没有设置。您在客户端上设置 cookie。在重新加载页面之前,服务器将不会读取该 cookie,因为服务器代码执行 before 客户端代码。由于您构建代码的方式,每次重新加载控制台时,都将始终显示在 previous 页面上设置的 cookie
-
匹配两个cookie(正面和背面)的最佳选择是通过xhttp请求将您的cookie发送到php。
标签: javascript php jquery cookies