Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Http 如何检测服务器端是否禁用cookie_Http_Cookies_Server Side - Fatal编程技术网

Http 如何检测服务器端是否禁用cookie

Http 如何检测服务器端是否禁用cookie,http,cookies,server-side,Http,Cookies,Server Side,如何在服务器(服务器端)上检测浏览器中的Cookie是否已禁用?可能吗 详细说明:我正在服务器上处理HTTP请求。我想通过set cookie标题设置cookie。我当时需要知道是客户端浏览器将设置cookie,还是忽略我设置cookie的请求。尝试将某些内容存储到cookie中,然后读取它。如果您没有得到预期的结果,那么cookie可能会被禁用。使用cookie集发送重定向响应;处理cookie的(特殊)重定向URL测试时-如果存在,则重定向到正常处理,否则重定向到错误状态 请注意,这只能告诉

如何在服务器(服务器端)上检测浏览器中的Cookie是否已禁用?可能吗


详细说明:我正在服务器上处理HTTP请求。我想通过
set cookie
标题设置cookie。我当时需要知道是客户端浏览器将设置cookie,还是忽略我设置cookie的请求。

尝试将某些内容存储到cookie中,然后读取它。如果您没有得到预期的结果,那么cookie可能会被禁用。

使用cookie集发送重定向响应;处理cookie的(特殊)重定向URL测试时-如果存在,则重定向到正常处理,否则重定向到错误状态


请注意,这只能告诉您浏览器允许设置cookie,但不能告诉您设置cookie的时间。我的FF允许我强制所有cookie进入“会话”模式,除非该站点被特别添加到异常列表中-当FF关闭时,无论服务器指定的到期日如何,此类cookie都将被丢弃。这是我经常使用的模式。

我认为没有直接的方法来检查。最好的方法是在cookie中存储一个值,并尝试读取它们,然后决定是否启用cookie。

您可以使用Javascript来实现这一点

库:

函数createCookie(名称、值、天数){
var到期;
如果(天){
变量日期=新日期();
date.setTime(date.getTime()+(天*24*60*60*1000));
expires=“;expires=“+date.togmString();
}
else expires=“”;
document.cookie=name+“=”+value+expires+“path=/”;
}
函数readCookie(名称){
变量nameEQ=name+“=”;
var ca=document.cookie.split(“;”);
对于(变量i=0;i
要运行的代码:

警报(areCookiesEnabled());
记住


这仅在启用Javascript时有效

cookies是否“已启用”的问题太过复杂。我的浏览器(Opera)具有每个站点的cookie设置。此外,该设置不是“是/否”。最有用的形式实际上是“仅会话”,忽略服务器的到期日期。如果您在设置后直接测试它,它将在那里。明天就不会了


此外,由于这是一个可以更改的设置,即使测试cookie是否保留,也只会在测试时告诉您设置。我可能已经决定手动接受这一个cookie。如果我不断收到垃圾邮件,我可以(有时也会)关闭该站点的cookie。

检查cookie支持的常用方法是通过重定向

最好只在用户尝试执行启动会话的操作时执行此操作,例如登录或向购物车添加内容。否则,根据您的处理方式,您可能会阻止不支持cookie的用户或机器人访问整个站点

首先,服务器检查登录数据是否正常-如果登录数据错误,用户将正常收到反馈。如果正确,那么服务器会立即响应cookie并重定向到一个页面,该页面旨在检查cookie,该页面可能只是相同的URL,但在查询字符串中添加了一些标志。如果第二个页面没有收到cookie,则用户会收到一条消息,说明他们无法登录,因为浏览器上禁用了cookie

如果您已经遵循登录表单的Post Redirect Get模式,则此设置和cookie检查不会添加任何其他请求-cookie可以在现有重定向期间设置,并由重定向后加载的目标进行检查

现在了解为什么我只在用户启动操作后才进行cookie测试,而不是在每次页面加载时。我见过一些网站在每一个页面上都进行cookie测试,但没有意识到这会对搜索引擎试图抓取网站的行为产生影响。也就是说,如果用户启用了cookie,那么测试cookie设置一次,因此他们只需要在请求的第一个页面上忍受重定向,从那时起就没有重定向。然而,对于任何不返回cookies的浏览器或其他用户代理(如搜索引擎),每个页面都可能导致重定向

检查cookie支持的另一种方法是使用Javascript——这样,就不需要重定向——您可以编写cookie并立即将其读回,以查看它是否被存储并检索。这样做的缺点是它在客户端的脚本中运行——也就是说,如果您仍然希望有关是否支持Cookie的消息返回到服务器,那么您仍然需要进行组织——例如通过Ajax调用


对于我自己的应用程序,我通过在用户登录之前在登录屏幕上设置包含随机令牌的cookie,并在用户提交其登录详细信息时检查该令牌,实现了对“登录CSRF”攻击(CSRF攻击的一种变体)的一些保护。阅读更多关于谷歌登录CSRF的信息。这样做的一个副作用是,当他们登录时,我可以检查cookie是否存在-不需要额外的重定向。

如果您只想检查会话cookie(会话生存期内存在的cookie)是否已启用,请在web.config文件中将您的会话模式设置为自动检测,然后Asp.Net框架将
<sessionState cookieless="AutoDetect" />
if (Request.Cookies["AspxAutoDetectCookieSupport"] != null)  { ... }
navigator.cookieEnabled
<script>
// Cookie detection
document.cookie = "testing=cookies_enabled; path=/";
if(document.cookie.indexOf("testing=cookies_enabled") < 0)
{
    // however you want to handle if cookies are disabled
    alert("Cookies disabled");
}
</script>
<noscript>
    <!-- However you like handling your no JavaScript message -->
    <h1>This site requires JavaScript.</h1>
</noscript>
<?php
session_start();

function visitor_is_enable_cookie() {
    $cn = 'cookie_is_enabled';
    if (isset($_COOKIE[$cn]))
        return true;
    elseif (isset($_SESSION[$cn]) && $_SESSION[$cn] === false)
        return false;

    // saving cookie ... and after it we have to redirect to get this
    setcookie($cn, '1');
    // redirect to get the cookie
    if(!isset($_GET['nocookie']))
        header("location: ".$_SERVER['REQUEST_URI'].'?nocookie') ;

    // cookie isn't availble
    $_SESSION[$cn] = false;
    return false;
}

var_dump(visitor_is_enable_cookie());
<?php   session_start();
if(SID!=null){
  echo "Please enable cookie";
}
?>
<script>
if (navigator.cookieEnabled) {
    // Cookies are enabled
}
else {
    // Cookies are disabled
}
</script>
var express = require('express'),
    cookieParser = require('cookie-parser'),
    expressSession = require('express-session')
return (req, res, next) => {
  if(req.query.cookie && req.cookies.cookies_enabled)
    return res.redirect('https://yourdomain.io' + req.path)
  if(typeof(req.cookies.cookies_enabled) === 'undefined' && typeof(req.query.cookie) === 'undefined') {
    return res.cookie('cookies_enabled', true, {
      path: '/',
      domain: '.yourdomain.io',
      maxAge: 900000, 
      httpOnly: true,
      secure: process.env.NODE_ENV ? true : false
    }).redirect(req.url + '?cookie=1')
  }
  if(typeof(req.cookies.cookies_enabled) === 'undefined') {
    var target_page = 'https://yourdomain.io' + (req.url ? req.url : '')
    res.send('You must enable cookies to view this site.<br/>Once enabled, click <a href="' + target_page + '">here</a>.')
    res.end()
    return
  }
  next()
}