我正在开发一个需要javascript和会话的页面。如果禁用了javascript,我已经有代码警告用户。现在,我想处理禁用cookie的情况,因为会话ID存储在cookie中。
我想到了几个想法:
最好的方法是什么?感谢
修改
根据链接的文章,我提出了自己的方法,并认为我会分享,其他人可能会使用它,也许我会得到一些批评。 (假设您的PHP会话存储在名为PHPSESSID
)的cookie中
<div id="form" style="display:none">Content goes here</div>
<noscript>Sorry, but Javascript is required</noscript>
<script type="text/javascript"><!--
if(document.cookie.indexOf('PHPSESSID')!=-1)
document.getElementById('form').style.display='';
else
document.write('<p>Sorry, but cookies must be enabled</p>');
--></script>
答案 0 :(得分:70)
在JavaScript中,您可以对所有主流浏览器都支持的cookieEnabled属性进行简单测试。如果您处理较旧的浏览器,则可以设置cookie并检查它是否存在。 (借鉴Modernizer):
if (navigator.cookieEnabled) return true;
// set and read cookie
document.cookie = "cookietest=1";
var ret = document.cookie.indexOf("cookietest=") != -1;
// delete cookie
document.cookie = "cookietest=1; expires=Thu, 01-Jan-1970 00:00:01 GMT";
return ret;
在PHP中,它相当“复杂”,因为您必须刷新页面或重定向到另一个脚本。在这里,我将使用两个脚本:
somescript.php
<?php
session_start();
setcookie('foo', 'bar', time()+3600);
header("location: check.php");
check.php
<?php echo (isset($_COOKIE['foo']) && $_COOKIE['foo']=='bar') ? 'enabled' : 'disabled';
答案 1 :(得分:17)
但要检查是否使用isset($ _ COOKIE [“cookie”])启用了cookie,您必须刷新。 我正在这样做(基于cookie的会话:)。
session_start();
$a = session_id();
session_destroy();
session_start();
$b = session_id();
session_destroy();
if ($a == $b)
echo"Cookies ON";
else
echo"Cookies OFF";
答案 2 :(得分:6)
您不能在同一页面的加载集中检查是否设置了cookie,您必须执行重新加载页面:
答案 3 :(得分:6)
透明,干净且简单的方法,使用 PHP 检查Cookie可用性并利用 AJAX 透明重定向,因此不会触发页面重新加载。它也不需要会话。
客户端代码(JavaScript)
function showCookiesMessage(cookiesEnabled) {
if (cookiesEnabled == 'true')
alert('Cookies enabled');
else
alert('Cookies disabled');
}
$(document).ready(function() {
var jqxhr = $.get('/cookiesEnabled.php');
jqxhr.done(showCookiesMessage);
});
(JQuery AJAX调用可以用纯JavaScript AJAX调用替换)
服务器端代码(PHP)
if (isset($_COOKIE['cookieCheck'])) {
echo 'true';
} else {
if (isset($_GET['reload'])) {
echo 'false';
} else {
setcookie('cookieCheck', '1', time() + 60);
header('Location: ' . $_SERVER['PHP_SELF'] . '?reload');
exit();
}
}
首次调用脚本时,会设置cookie并且脚本会告诉浏览器重定向到自身。浏览器透明地完成它。 没有页面重新加载,因为它是在AJAX调用范围内完成的。。
第二次,当通过重定向调用时,如果收到cookie,则脚本响应HTTP 200(字符串为“true”),因此调用showCookiesMessage
函数。
如果第二次调用该脚本(由“reload”参数标识)并且未收到cookie,则它将使用字符串“false”响应HTTP 200,并调用showCookiesMessage
函数。
答案 4 :(得分:2)
您可以进行Ajax调用(注意:此解决方案需要JQuery):
<强>使用example.php 强>
<?php
setcookie('CookieEnabledTest', 'check', time()+3600);
?>
<script type="text/javascript">
CookieCheck();
function CookieCheck()
{
$.post
(
'ajax.php',
{
cmd: 'cookieCheck'
},
function (returned_data, status)
{
if (status === "success")
{
if (returned_data === "enabled")
{
alert ("Cookies are activated.");
}
else
{
alert ("Cookies are not activated.");
}
}
}
);
}
</script>
<强> ajax.php 强>
$cmd = filter_input(INPUT_POST, "cmd");
if ( isset( $cmd ) && $cmd == "cookieCheck" )
{
echo (isset($_COOKIE['CookieEnabledTest']) && $_COOKIE['CookieEnabledTest']=='check') ? 'enabled' : 'disabled';
}
结果会出现一个警告框,显示是否启用了多个cookie。当然,您不必显示警告框,从这里您可以采取其他步骤来处理已停用的Cookie。
答案 5 :(得分:1)
<强>的JavaScript 强>
您可以使用JavaScript创建Cookie并检查它是否存在:
//Set a Cookie`
document.cookie="testcookie"`
//Check if cookie exists`
cookiesEnabled=(document.cookie.indexOf("testcookie")!=-1)? true : false`
或者您可以使用jQuery Cookie plugin
//Set a Cookie`
$.cookie("testcookie", "testvalue")
//Check if cookie exists`
cookiesEnabled=( $.cookie("testcookie") ) ? true : false`
<强>腓强>
setcookie("testcookie", "testvalue");
if( isset( $_COOKIE['testcookie'] ) ) {
}
不确定Php是否会起作用,因为我无法测试它。
答案 6 :(得分:0)
很容易检测到Cookie是否已启用:
如果你可以获得你设置的cookie,则启用cookie
,否则启用。
Embedding the session id in the links and forms
来说这是一个坏主意,对SEO来说是坏事。
在我看来,人们不想启用cookie 不常见。
答案 7 :(得分:0)
这是一个非常有用且轻量级的javascript插件,可以完成此任务:js-cookie
Cookies.set('cookieName', 'Value');
setTimeout(function(){
var cookieValue = Cookies.get('cookieName');
if(cookieValue){
console.log("Test Cookie is set!");
} else {
document.write('<p>Sorry, but cookies must be enabled</p>');
}
Cookies.remove('cookieName');
}, 1000);
适用于所有浏览器,接受任何字符。
答案 8 :(得分:0)
Cookie是客户端的,无法使用PHP进行正确测试。 这是基线,每个解决方案都是这个问题的总结。
这意味着如果您正在寻找解决cookie问题的方法,那么您就错了。不要使用PHP,使用像Javascript这样的客户端语言。
您可以使用PHP使用Cookie吗?是的,但您必须重新加载以使设置为PHP&#39;可见&#39;。
例如:是否可以测试浏览器是否可以使用普通PHP设置Cookie&#39;。唯一正确的答案是&#39; NO&#39;。
你能读一个已经设置好的Cookie:&#39; YES&#39;使用预定义的$ _COOKIE(启动PHP-App之前的设置副本)。