从jQuery设置cookie并从php

时间:2016-11-17 08:32:53

标签: javascript php jquery cookies

我试图通过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函数设置的正确值。)

2 个答案:

答案 0 :(得分:1)

正如评论部分已经提到的,您的Cookie不会出现在首页加载,因为它尚未设置。 (如果直接在JS中设置 Cookie或通过AJAX基本相同)

有效获取信息的唯一方法是使用页面重新加载或重定向或通过AJAX请求(取决于您的需求)。例如,在Cookie设置为:

后,您可以在JS中重定向
//set your cookie in JS
window.location = location.host; 

有关JS重定向的更多信息可以在here找到,或者您通过Google搜索。

您还可以在PHP中设置Cookie并使用header()功能重定向:

header('Location: http://www.example.com/');

可以在here或Google上找到有关PHP重定向的更多信息;)

答案 1 :(得分:0)

您可以使用ajax进行检查。 这是一个简单的例子:

select  id,
        title,
        parent_id 
from    (select * from products
         order by parent_id, id) base,
        (select @pv := '3') tmp
where   find_in_set(parent_id, @pv) > 0
and     @pv := concat(@pv, ',', id)