感谢您的帮助。
我有一个脚本可以检查登录,然后设置一些cookie。有4个cookie被设置,(稍后我可能会将一些cookie移到服务器会话中,但现在我正在使用cookie。
我遇到的问题是,在执行脚本的其余部分之前,只有4个中的前2个被设置。谁能明白为什么?
// If there is a row, and only 1 row, then the details are correct. Set the cookie and re-direct
$row = mysqli_fetch_array($data);
setcookie('user_id', $row['User_ID'], time()+ (60*15),"/");
setcookie('user_name', $row['UserName'], time()+ (60*15),"/");
setcookie('access_Level', $row['Access_Level'], time()+ (60*15),"/");
setcookie('db_con', $row['Db_Con'], time()+ (60*15),"/");
$home_url = $link . "application/views/Dashboard.php";
header('Location: ' . $home_url);
答案 0 :(得分:2)
使用:
<?php
$row = array(
'User_ID' => '1',
'UserName' => '1',
'Access_Level' => '1',
'Db_Con' => '1'
);
setcookie('user_id', $row['User_ID'], time()+ (60*15),"/");
setcookie('user_name', $row['UserName'], time()+ (60*15),"/");
setcookie('access_Level', $row['Access_Level'], time()+ (60*15),"/");
setcookie('db_con', $row['Db_Con'], time()+ (60*15),"/");
// This will not be set, and the cookie is not created.
setcookie('db_con2', $row['Db_Con2'], time()+ (60*15),"/");
?>
http://jfcoder.com/test/setcookie.php
在Firefox中,我右键点击页面View Page Info
,Security
标签,View Cookies
按钮,查看页面的Cookie。所有四个cookie都显示在我的浏览器中的该页面上。最后一个没有(因为它没有价值)。
我认为您的列名未正确拼写/大写,或其他一些问题,并且$row['Access_Level']
和$row['Db_Con']
在结果中为空列。
答案 1 :(得分:0)
首先,一个显而易见的问题是:您是否尝试将要保存的变量复制到Cookie中,并将它们粘贴到print_r()
语句中,这样您就可以证明它们具有您期望的值。您可能会输入错误或不正确的大小写或类似的东西。
接下来要检查的是这些变量中的值。您尚未指定Access_Level
和Db_Con
的可能值,但如果它们设置为false
或为空,则Cookie将被清除,而不是设置为该值。这不太可能是你想要的。
如果这不是问题,另一个可能的问题(虽然我在这种情况下怀疑)是你的cookie的总长度。一个站点的cookie字符串中最多只能提供4K。如果您使用的是UTF-8编码(建议使用),这意味着只有大约一千个字符,包括cookie字符串的所有字段名称和格式,以及值。超出该长度的Cookie将无法保存。看起来这不是你的问题,但我想你可能正在服务其他的cookie以及这四种,这可能会给你带来平衡。
我还强烈建议您不要将Cookie用于此处使用的各种数据。
重要的是要知道cookie是一种高度不安全的数据存储方式。他们可以被第三方监视,并且很容易被篡改。如果您的网站依赖Access_Level
在后续网页加载时准确无误并且正在使用它来决定是否授予对某些网页的访问权限,那么您已经为您的网站提供了大量安全性孔。
其次,Cookies效率低下。对于向服务器发出的每个请求,都会在两个方向上发送整个cookie字符串。这包括图形和其他无法实际影响它们的文件。因此,如果一个页面包含大量的图像,样式表和它加载的javascript文件,那么每次用户进入新页面时,你都会在网上发送所有的cookie几十次。
我建议使用PHP会话。当然,他们也使用cookie,但它不包含任何容易被篡改的数据,并且它只是一个cookie变量,因此它最大限度地减少了这两个问题。它也非常容易使用。
希望有所帮助。