精华内容
下载资源
问答
  • 重新设置IE浏览器开启COOKIE功能  覆盖自动cookie处理 (Override automatic cookie handling)  第一方cookie:接受 (First-party cookies: Accept)  第三方cookie:接受 (Third-party cookies: Accept)  ...
  • 在客户端设置cookieIntroduction and Prerequisites 简介和先决条件 This article describes methods for detecting whether a client browser accepts and returns HTTP cookies and whether the client b...

    在客户端设置cookie

    Introduction and Prerequisites

    简介和先决条件

    This article describes methods for detecting whether a client browser accepts and returns HTTP cookies and whether the client browser runs JavaScript.  Most client browsers will, by default, be configured to use cookies and JavaScript, but some may not do that, and it may be important to your application design to be aware of these client-side factors as you build your web documents.  For example, most shopping carts rely on cookies to store a pointer to the contents of the cart.  If your client has cookies disabled, the shopping cart would not work.  Rather than simply fail, it would be a better design to be able to tell the client about the dependency.  Or you might have a gallery that used jQuery to provide an attractive client experience.  If you knew that JavaScript was disabled you would be able to adjust the gallery behavior. 

    本文介绍了用于检测客户端浏览器是否接受并返回HTTP cookie以及客户端浏览器是否运行JavaScript的方法。 默认情况下,大多数客户端浏览器都将配置为使用Cookie和JavaScript,但有些可能不会这样做,并且在构建Web文档时要意识到这些客户端因素对于您的应用程序设计可能很重要。 例如,大多数购物车都依赖Cookie来存储指向购物车内容的指针。 如果您的客户禁用了Cookie,则购物车将无法使用。 与其说简单地失败,不如说是能够告诉客户有关依赖性的更好的设计。 或者您可能拥有使用jQuery来提供有吸引力的客户体验的画廊。 如果您知道禁用了JavaScript,则可以调整图库的行为。

    These concepts seems like common sense in application design, but the client/server relationship has a structure that hinders this common sense approach.  The order of request and response events is an important principle.  All communication is initiated by the client.  The client makes a request, the server-side scripts run, and the server-side scripts are complete before the response is sent to the browser.  As a result, any of the characteristics of the client browser that are not part of the request are invisible to the server-side scripts that create HTML documents.  And the server is a response-only device.  It cannot initiate communication with the client.  How, then, can we "look over the wall" to discern what the client browser will do with the cookies and JavaScript that we might send?

    这些概念在应用程序设计中似乎是常识,但是客户/服务器关系的结构阻碍了这种常识方法。 请求和响应事件的顺序是重要的原则。 所有通信均由客户端启动。 客户端发出请求 ,运行服务器端脚本,并且请求的客户端浏览器的任何特征对于创建HTML文档的服务器端脚本都是不可见的。 服务器是仅响应的设备。 它无法启动与客户端的通信。 那么,我们如何才能“窥视墙壁”以辨别客户端浏览器将如何处理我们可能发送的cookie和JavaScript?

    In order to understand the logic of these processes, you need to understand the stateless nature of HTTP protocols, and the order of events in a client/server system.  There are two articles here at E-E that can help with the background knowledge you'll need as you read this article.  If you're not familiar with these concepts, please take a moment to read these articles, then come back to this one.

    为了了解这些过程的逻辑,您需要了解HTTP协议的无状态性质以及客户端/服务器系统中事件的顺序。 EE上有两篇文章可以帮助您阅读本文时所需要的背景知识。 如果您不熟悉这些概念,请花一点时间阅读这些文章,然后再回到这篇文章。

    HTTP Client/Server HTTP客户端/服务器 PHP Sessions PHP会话

    Setting Up a Test Bed

    设置测试台

    Since we will want to be able to test our scripts, we will need a browser that can both accept and refuse cookies, and can enable and disable JavaScript.  We can make these settings in the Firefox browser.  At the time of this writing (November 2014), Firefox is currently at release 33+, and these instructions are applicable to a Windows version of that release.  Mozilla has a way of moving things around from release to release, and you may find in the future that the instructions are no longer directly applicable.  Nevertheless, the concepts will still be workable, and a Google search for these headlines will lead you to an implementation of the concepts.  Similar instructions for Internet Explorer and Google Chrome are included at the end of the article.

    由于我们希望能够测试脚本,因此我们需要一个既可以接受也可以拒绝cookie并可以启用和禁用JavaScript的浏览器。 我们可以在Firefox浏览器中进行这些设置。 在撰写本文时(2014年11月),Firefox当前版本为33+,这些说明适用于该版本的Windows版本。 Mozilla提供了一种在各个发行版之间进行迁移的方法,您将来可能会发现这些说明不再直接适用。 尽管如此,这些概念仍然可以使用,并且通过Google搜索这些标题,您可以实现这些概念。 本文末尾包含了针对Internet Explorer和Google Chrome的类似说明。

    Enabling and Disabling Cookies in Firefox

    在Firefox中启用和禁用Cookies

    The path for this process starts with the Firefox menu, hidden behind the three-bar menu button in the upper right of the browser window.  To enable cookies for your test, follow these steps:

    此过程的路径从Firefox菜单开始,该菜单隐藏在浏览器窗口右上方的三栏菜单按钮后面。 要为您的测试

    1. Click the three-bar menu button to reveal the menu

    1.单击三栏菜单按钮以显示菜单

    2. Click "Options"

    2.点击“选项”

    3. Click "Privacy"

    3.点击“隐私”

    4. Uncheck "Accept cookies from sites"

    4.取消选中“接受来自站点的cookie”

    5. Click "Exceptions"

    5.点击“例外”

    6. Type your base URL, for example, Experts-Exchange.com

    6.键入您的基本URL,例如

    7. Click "Allow for Session"

    7.单击“允许会话”

    8. Close / OK the menu windows

    8.关闭/确定菜单窗口

    To disable cookies, follow steps 1-5 above, then:

    若要

    6. Scroll down to find and highlight your base URL

    6.向下滚动以查找并突出显示您的基本URL

    7. Click "Remove Site"

    7.单击“删除站点”

    8. Close / OK the menu windows

    8.关闭/确定菜单窗口

    After you're finished testing you may want to go back to step 4 and restore your preferred settings.

    完成测试后,您可能需要返回步骤4并还原您的首选设置。

    Enabling and Disabling JavaScript in Firefox

    在Firefox中启用和禁用JavaScript

    1. In the browser address bar, instead of a URL, type about:config

    1.在浏览器地址栏中,而不是URL中,键入

    2. Dismiss any warning box that may appear

    2.消除可能出现的任何警告框

    3. Scroll down the very long list of configuration options to find "javascript.enabled"

    3.向下滚动很长的配置选项列表,找到“ javascript.enabled”

    4. Click to highlight that line

    4.单击以突出显示该行

    5. Right-click to reveal a dialog box

    5.右键单击以显示一个对话框

    6. Click "Toggle" to enable or disable JavaScript

    6.单击“切换”以启用或禁用JavaScript

    After you've finished testing you may want to repeat the process to enable JavaScript.

    完成测试后,您可能需要重复此过程以启用JavaScript。

    Testing for Cookies

    测试Cookie

    When a server sends a cookie to the client browser, the browser stores the cookie and returns the cookie with each subsequent HTTP request to the same URL.  This means that we must use a two-step process to first set and then detect a cookie.  We can accomplish both steps in a single script file, and we can package the two-step process into a one-line function call.  The function will return the client's IP address if cookies are in play, or boolean FALSE if not.

    当服务器将cookie发送到客户端浏览器时,浏览器将存储cookie并将cookie和随后的每个HTTP请求返回到相同的URL。 这意味着我们必须使用两步过程来首先设置然后检测cookie。 我们可以在一个脚本文件中完成两个步骤,并且可以将两步过程打包到一个单行函数调用中。 如果正在播放cookie,该函数将返回客户端的IP地址;否则返回布尔值FALSE。

    Our strategy uses the client IP address and a "digested" version of the browser name (HTTP_USER_AGENT) as part of a small temporary file name on our server.  If there is no cookie in the request, we write this file, set a cookie, and redirect the browser to our current URL.  This redirect will cause a new browser request that will reload the script.  Upon the reload, if the cookie is present in the request we know that the client is a well-behaved browser that will accept and return cookies.  If the cookie is not present, but the temporary file is present, then we know that the browser did not return the cookie.

    我们的策略将客户端IP地址和浏览器名称的“摘要”版本(HTTP_USER_AGENT)用作服务器上小型临时文件名的一部分。 如果请求中没有cookie,我们将编写此文件,设置cookie,然后将浏览器重定向到我们当前的URL。 此重定向将导致一个新的浏览器请求,该请求将重新加载脚本。 重新加载后,如果请求中存在cookie,我们就会知道客户端是行为良好的浏览器,它将接受并返回cookie。 如果不存在Cookie,但存在临时文件,那么我们知道浏览器未返回Cookie。

    This will be a dependable approach most of the time, since most of the time the client's IP address and browser will be unique and consistent for at least the duration of this (essentially instantaneous) pair of requests.  There may be edge cases where this approach might not work perfectly.  One example that comes to mind would be a setting where multiple client browsers share a single IP address.  If two identical browsers on the same IP address simultaneously visited the same same web page, and they had different settings for cookies, a race condition could ensue that might give a false indicator of the cookie status.

    在大多数情况下,这将是一种可靠的方法,因为在大多数情况下,客户端的IP地址和浏览器至少在这对(基本上是瞬时的)请求对期间都是唯一且一致的。 在某些极端情况下,此方法可能无法完美工作。 我想到的一个例子是多个客户端浏览器共享一个IP地址的设置。 如果使用相同IP地址的两个相同的浏览器同时访问了相同的网页,并且它们具有不同的Cookie设置,则可能会导致竞争状态,从而可能会错误指示Cookie的状态。

    <?php // demo/cookie_check.php
    /**
     * This script tries to detect whether a browser is accepting and returning cookies
     */
    error_reporting(E_ALL);
    
    function browser_cookies()
    {
        // SETTINGS SHOULD ALLOW FOR SIMULTANEOUS ACCESS FROM MANY CLIENTS
        $cookiename = 'cookie_check';
        $client_agt = !empty($_SERVER['HTTP_USER_AGENT']) ? md5($_SERVER['HTTP_USER_AGENT']) : 'unknown';
        $client_ipa = !empty($_SERVER['REMOTE_ADDR'])     ? $_SERVER['REMOTE_ADDR']          : '1.1.1.1';
        $state_file = "cookie_check.$client_agt.$client_ipa.txt";
    
        // IF THERE IS A COOKIE OUR WORK IS DONE
        $cookie_value = !empty($_COOKIE[$cookiename]) ? $_COOKIE[$cookiename] : FALSE;
    
        // IF THERE IS NO COOKIE
        if (!$cookie_value)
        {
            // AND IF THE STATEFUL FILE EXISTS
            if (file_exists($state_file))
            {
                $cookie_value = FALSE;
            }
            // BUT IF THE STATEFUL FILE HAS NOT BEEN CREATED
            else
            {
                // CREATE THE STATEFUL FILE AND TRY TO SET A COOKIE
                file_put_contents($state_file, $client_ipa);
                setcookie($cookiename, $client_ipa);
    
                // NOW FORCE A RELOAD OF THE WEB PAGE
        	    header('Location: ' . $_SERVER['REQUEST_URI']);
                exit;
            }
        }
    
        // TIDY UP AFTER OURSELVES AND RETURN THE IP ADDRESS OR FALSE
        @unlink($state_file);
        return $cookie_value;
    }
    
    
    // USE CASE
    if ($ip_addr = browser_cookies())
    {
        echo "THIS CLIENT ACCEPTS AND RETURNS COOKIES AT IP ADDRESS: $ip_addr";
    }
    else
    {
        echo "THIS CLIENT DOES NOT USE COOKIES";
    }
    

    Testing for JavaScript with Cookies

    使用Cookie测试JavaScript

    Conceptually this is nearly identical to testing for cookies, but there is one important protocol difference.  When we want to set a cookie and redirect the client browser to reload the web page, we can do so entirely in PHP without creating any browser output.  But we can't run any JavaScript without writing the JavaScript code to the client browser.  This means that the PHP header() function is unusable, since HTTP headers must come first and be complete before any browser output.  To get around this, we can use the meta-refresh tag in place of the header("Location: ...") function call.

    从概念上讲,这与测试cookie几乎相同,但是协议存在一个重要差异。 当我们想要header()函数不可用,因为HTTP标头必须首先出现,并且必须在浏览器输出之前完成。 为了解决这个问题,我们可以使用meta-refresh标签代替header(“ Location:...”)函数调用。

    <?php // demo/javascript_check.php
    /**
     * This script tries to detect whether a browser will run JavaScript
     */
    error_reporting(E_ALL);
    
    function browser_javascript()
    {
        // SETTINGS SHOULD ALLOW FOR SIMULTANEOUS ACCESS FROM MANY CLIENTS
        $signalname = 'javascript';
        $client_agt = !empty($_SERVER['HTTP_USER_AGENT']) ? md5($_SERVER['HTTP_USER_AGENT']) : 'unknown';
        $client_ipa = !empty($_SERVER['REMOTE_ADDR'])     ? $_SERVER['REMOTE_ADDR']          : '1.1.1.1';
        $state_file = "javascript_check.$client_agt.$client_ipa.txt";
    
        // IF THERE IS A JAVASCRIPT SIGNAL IN THE COOKIE OUR WORK IS DONE
        $signal_value = !empty($_COOKIE[$signalname]) ? $_COOKIE[$signalname] : FALSE;
    
        // IF THERE IS NO JAVASCRIPT SIGNAL
        if (!$signal_value)
        {
            // PREPARE A JAVASCRIPT SETCOOKIE TEST
            $jstest = <<<EOJ
    <script>
    document.cookie = "$signalname=$client_ipa";
    </script>
    EOJ;
    
            // PREPARE A META-REFRESH TAG
            $request = $_SERVER['REQUEST_URI'];
            $refresh = <<<EOR
    <meta http-equiv="refresh" content="0;URL='$request'" />
    EOR;
    
            // IF THE STATE FILE EXISTS BUT THERE IS NO JAVASCRIPT SIGNAL
            if (file_exists($state_file))
            {
                $signal_value = FALSE;
            }
            // BUT IF THE STATEFUL FILE HAS NOT BEEN CREATED
            else
            {
                // CREATE THE STATEFUL FILE AND TRY TO SET A JAVASCRIPT COOKIE
                file_put_contents($state_file, $client_ipa);
                echo $jstest;
    
                // NOW FORCE A RELOAD OF THE WEB PAGE
          	    echo $refresh;
                exit;
            }
        }
    
        // TIDY UP AFTER OURSELVES AND RETURN THE IP ADDRESS OR FALSE
        @unlink($state_file);
        return $signal_value;
    }
    
    
    // USE CASE
    if ($ip_addr = browser_javascript())
    {
        echo "THIS CLIENT RUNS JAVASCRIPT AT IP ADDRESS: $ip_addr";
    }
    else
    {
        echo "THIS CLIENT DOES NOT SUPPORT JS";
    }
    
    browser_javascript() function to test for JavaScript. 

    Testing for JavaScript Without Using Cookies

    在不使用Cookie的情况下测试JavaScript

    There is an HTML noscript tag that can be helpful.  This tag is used to wrap parts of the document that are to be evaluated by the browser if JavaScript is turned off.  One of the common uses of the noscript tag is to tell the client that he's missing a part of the web experience.  Example:

    有一个HTML noscript标记可能会有所帮助。 如果关闭了JavaScript,则此标签用于包装将由浏览器评估的文档部分。

    <noscript>
       Your browsing experience will be much better with JavaScript enabled!
    </noscript>
    

    We can exploit the script and noscript tags to determine whether the client runs JavaScript.  Like the other methods used to test for cookies and JavaScript, we still need something in the HTTP request to tell us the status of the client browser.  In this example, we will add a single URL parameter to the end of the request string and redirect the browser to reload our script.  If JavaScript is turned off, the browser will run the noscript content, and our refreshed URL will include noJS.  Otherwise, the browser will run the script content, and our refreshed URL will include JS

    我们可以利用内容,并且刷新后的URL将包含内容,并且刷新后的URL将包含

    <?php // demo/javascript_check_nocookie.php
    /**
     * This script tries to detect whether a browser will run JavaScript
     */
    error_reporting(E_ALL);
    
    function browser_javascript_nocookie()
    {
        $client_ipa = !empty($_SERVER['REMOTE_ADDR']) ? $_SERVER['REMOTE_ADDR'] : '1.1.1.1';
    
        // IS THERE A SIGNAL STRING?
        $nojs = isset($_GET['noJS']);
        $js   = isset($_GET['JS']);
        if ($nojs || $js)
        {
            if ($nojs) return FALSE;
            if ($js)   return $client_ipa;
        }
        else
        {
            // PREPARE META-REFRESH TAGS WITH AN EXTRA URL PARAMETER
            $requestjs = $_SERVER['REQUEST_URI'];
            $requestno = $_SERVER['REQUEST_URI'];
            if (strpos($_SERVER['REQUEST_URI'], '?'))
            {
                $requestjs .= "&JS";
                $requestno .= "&noJS";
            }
            else
            {
                $requestjs .= "?JS";
                $requestno .= "?noJS";
            }
            $refresh = <<<EOR
    <noscript><meta http-equiv="refresh" content="0;URL='$requestno'" /></noscript>
    <script>document.write("<meta http-equiv=\"refresh\" content=\"0;URL='$requestjs'\" />");</script>
    EOR;
    
            // NOW FORCE A RELOAD OF THE WEB PAGE
            echo $refresh;
            exit;
        }
    }
    
    
    if ($ip_addr = browser_javascript_nocookie())
    {
        echo "THIS CLIENT RUNS JAVASCRIPT AT IP ADDRESS: $ip_addr";
    }
    else
    {
        echo "THIS CLIENT DOES NOT SUPPORT JS";
    }
    

    Potential Issues

    潜在问题

    Is this a "best practices" way of determining whether a browser supports JavaScript? It works, but I think there can be some arguments against it. When you rewrite the URL with JS or noJS appended, you're exposing a data element that your client should not have to think about. If your client bookmarks the URL after the rewrite, the bookmark will permanently reflect the JS or noJS setting that was in play at the time the bookmark was created. The function will rely on this setting rather than testing for JavaScript each time. 

    这是确定浏览器是否支持JavaScript的“最佳实践”方式吗? 它有效,但是我认为可能有人对此表示反对。 当您重写带有

    A Two-Step Redirect to Restore the Original URL

    两步重定向以还原原始URL

    A pair of signal files can be incorporated into this logic to keep the stateful information between requests. This will let us rewrite the URL twice.  The initial page load will be ignorant of the state of JavaScript; it will prepare two signal files -- one to indicate support for JavaScript and one to indicate no JavaScript support. The first URL rewrite will trigger the JS or noJS determination in the browser and the resulting request will tell the server about JavaScript support via the added URL parameter.  With this information, the server can remove the complementary signal file.  The second rewrite will remove the JS or noJS signal string from the end of the URL.  The server can rely on the existence of the remaining signal file to know whether the browser has support for JavaScript.  In practice, this causes a flash in the browser address bar, as the URL is rewritten.  You can install this script and run it to see the process in action.

    可以将一对信号文件合并到此逻辑中,以在请求之间保留状态信息。 这将使我们重写URL两次。 初始页面加载将忽略JavaScript的状态; 它将准备两个信号文件-一个指示对JavaScript的支持,另一个指示对JavaScript的不支持。 第一次URL重写将触发浏览器中的

    <?php // demo/javascript_check_nocookie.php
    /**
     * This script tries to detect whether a browser will run JavaScript
     */
    error_reporting(E_ALL);
    
    function browser_javascript_nocookie()
    {
        // SETTINGS SHOULD ALLOW FOR SIMULTANEOUS ACCESS FROM MANY CLIENTS
        $client_agt = !empty($_SERVER['HTTP_USER_AGENT']) ? md5($_SERVER['HTTP_USER_AGENT']) : 'unknown';
        $client_ipa = !empty($_SERVER['REMOTE_ADDR'])     ? $_SERVER['REMOTE_ADDR']          : '1.1.1.1';
        $state_JS   = "js_check.JS.$client_agt.$client_ipa.txt";
        $state_noJS = "js_check.noJS.$client_agt.$client_ipa.txt";
    
        // IS THERE A SIGNAL STRING IN THE URL?
        $js   = isset($_GET['JS']);
        $nojs = isset($_GET['noJS']);
        if ($js || $nojs)
        {
            // REMOVE THE COMPLEMENTARY STATE FILE
            if ($nojs)
            {
                @unlink($state_JS);
            }
            elseif ($js)
            {
                @unlink($state_noJS);
            }
    
            // SET UP A REGULAR EXPRESSION TO RESTORE THE ORIGINAL URL
            $rgx
            = '#'         // REGEX DELIMITER
            . '(&|\?)'    // AMPERSAND OR (ESCAPED) QUESTION MARK
            . '(no)?'     // LITERAL STRING no, OPTIONAL
            . 'JS'        // LITERAL STRING JS, REQUIRED
            . '$'         // AT END OF STRING
            . '#'         // REGEX DELIMITER
            ;
    
            // REMOVE THE SIGNAL STRING FROM THE URL AND REFIRE THE REQUEST
            $request = preg_replace($rgx, NULL, $_SERVER['REQUEST_URI']);
            $refresh = <<<EOR
    <meta http-equiv="refresh" content="0;URL='$request'" />
    EOR;
            echo $refresh;
            exit;
        }
    
        // THERE IS NO SIGNAL STRING IN THE URL
        else
        {
            // DOES THE STATE FILE EXIST?
            $js   = file_exists($state_JS);
            $nojs = file_exists($state_noJS);
            if ($nojs || $js)
            {
                if ($nojs)
                {
                    @unlink($state_noJS);
                    $retval = FALSE;
                }
                elseif ($js)
                {
                    @unlink($state_JS);
                    $retval = $client_ipa;
                }
                return $retval;
            }
    
            // THE STATE FILE DOES NOT EXIST
            else
            {
                // WRITE TWO STATE FILES
                file_put_contents($state_JS,   $client_ipa);
                file_put_contents($state_noJS, $client_ipa);
    
                // PREPARE META-REFRESH TAGS WITH AN EXTRA URL PARAMETER
                $requestjs = $_SERVER['REQUEST_URI'];
                $requestno = $_SERVER['REQUEST_URI'];
                if (strpos($_SERVER['REQUEST_URI'], '?'))
                {
                    $requestjs .= "&JS";
                    $requestno .= "&noJS";
                }
                else
                {
                    $requestjs .= "?JS";
                    $requestno .= "?noJS";
                }
    
                // REFIRE THE REQUEST WITH THE EXTRA URL PARAMETER
                $refresh = <<<EOR
    <noscript><meta http-equiv="refresh" content="0;URL='$requestno'" /></noscript>
    <script>document.write("<meta http-equiv=\"refresh\" content=\"0;URL='$requestjs'\" />");</script>
    EOR;
                echo $refresh;
                exit;
            }
        }
    }
    
    
    // USE CASE
    if ($ip_addr = browser_javascript_nocookie())
    {
        echo "THIS CLIENT RUNS JAVASCRIPT AT IP ADDRESS: $ip_addr";
    }
    else
    {
        echo "THIS CLIENT DOES NOT SUPPORT JS";
    }
    

    Overall, I think the best practices approach to the question of JavaScript is to design your site to work sensibly without JavaScript, and to use JavaScript (jQuery) to provide an enhanced user experience.

    总体而言,我认为针对JavaScript问题的最佳做法是将您的网站设计为jQuery )提供增强的用户体验。

    Summary

    摘要

    We have demonstrated convenient ways of getting information about the settings of the client's browser. These techniques will work dependably in almost all cases. They may give you better ways of creating a good browsing experience for your client community. The code snippets here have been tested in Firefox, Chrome and IE. You can copy them and install them on your server to see them in action.

    我们已经展示了获取有关客户端浏览器设置信息的便捷方法。 这些技术几乎可以在所有情况下可靠地工作。 它们可以为您提供更好的方法,为您的客户社区创造良好的浏览体验。 此处的代码段已在Firefox,Chrome和IE中进行了测试。 您可以复制它们并将它们安装在服务器上以查看它们的运行情况。

    Addendum

    附录

    Further reading on the state of the art in client browser data storage (beyond cookies):

    进一步阅读客户端浏览器数据存储中的最新技术(除了cookie):

    http://www.sitepoint.com/html5-browser-storage-past-present-future/ http://www.sitepoint.com/html5-browser-storage-past-present-future/

    Enable/Disable Cookies in Internet Explorer 11

    在Internet Explorer 11中启用/禁用Cookie

    1. Click the gear in the upper right corner of the browser window

    1.单击浏览器窗口右上角的齿轮

    2. Click "Internet Options"

    2.点击“ Internet选项”

    3. Click "Privacy" tab

    3.点击“隐私”标签

    4. Drag the slider to the top to disable cookies

    4.将滑块拖动到顶部以禁用cookie

    5. Click "Default" to enable cookies

    5.单击“默认”以启用cookie

    Enable/Disable JavaScript in Internet Explorer 11

    在Internet Explorer 11中启用/禁用JavaScript

    1. Click the gear in the upper right corner of the browser window

    1.单击浏览器窗口右上角的齿轮

    2. Click "internet Options"

    2.点击“互联网选项”

    3. Click "Security" tab

    3.单击“安全性”选项卡

    4. Click "Custom Level"

    4.单击“自定义级别”

    5. Scroll down to "Scripting"

    5.向下滚动到“脚本”

    6. Select the appropriate setting under "Active scripting"

    6.在“活动脚本”下选择适当的设置

    Find Cookies in Chrome 38

    在Chrome 38中查找Cookie

    Type this into your browser address bar: chrome://settings/cookies

    在浏览器地址栏中输入以下内容:

    Enable/Disable Cookies and JavaScript in Chrome 38

    在Chrome 38中启用/禁用Cookie和JavaScript

    https://support.google.com/accounts/answer/61416?hl=en https://support.google.com/accounts/answer/61416?hl=zh_CN https://support.google.com/adsense/answer/12654?hl=en https://support.google.com/adsense/answer/12654?hl=zh_CN

    References and Further Reading:

    参考资料和进一步阅读:

    http://roy.gbiv.com/ http://roy.gbiv.com/ https://www.ietf.org/rfc/rfc2616.txt https://www.ietf.org/rfc/rfc2616.txt http://www.w3.org/TR/WCAG20-TECHS/H76.html http://www.w3.org/TR/WCAG20-TECHS/H76.html https://developer.mozilla.org/en-US/docs/Web/API/document.cookie https://developer.mozilla.org/zh-CN/docs/Web/API/document.cookie http://en.wikipedia.org/wiki/Meta_refresh http://en.wikipedia.org/wiki/Meta_refresh http://www.w3schools.com/tags/ref_httpmethods.asp http://www.w3schools.com/tags/ref_httpmethods.asp http://www.w3schools.com/tags/tag_noscript.asp http://www.w3schools.com/tags/tag_noscript.asp

    Please give us your feedback!

    请给我们您的反馈意见!

    If you found this article helpful, please click the "thumb's up" button below. Doing so lets the E-E community know what is valuable for E-E members and helps provide direction for future articles.  If you have questions or comments, please add them.  Thanks!

    如果您发现本文有帮助,请单击下面的“竖起大拇指”按钮。 这样做可以使EE社区了解对EE成员有价值的内容,并为将来的文章提供指导。 如果您有任何问题或意见,请添加。 谢谢!

    翻译自: https://www.experts-exchange.com/articles/17334/Detecting-Client-Browser-Settings-for-Cookies-and-JavaScript.html

    在客户端设置cookie

    展开全文
  • Android WebView设置Cookie

    千次阅读 2020-05-11 08:24:06
    Android WebView设置Cookie 场景 最近公司项目需求,要求H5可以直接通过cookie得到相关信息 业务场景1: 网页登录:记录用户登录信息,下次进去不需要重复登录 业务场景2: 获取相关参数信息,比如...

    Android WebView设置Cookie

     

    场景

    最近公司项目需求,要求H5可以直接通过cookie得到相关信息

    • 业务场景1:

      网页登录:记录用户登录信息,下次进去不需要重复登录

    • 业务场景2:

      获取相关参数信息,比如:app版本号等信息

    HTTP Cookie管理机制

    实现Cookie参数注入,先来了解一下相关的配置

    1、domain(host)

    表示cookie所在的域,默认为请求地址

    例如:www.zyb.com/test/index.php

    domian默认为: www.zyb.com

    这里还有跨域问题: 域A: test1.zyb.com 域B: test2.zyb.com

    那么在域A生产一个可以使域A和域B都能访问的Cookie,就需要将Cookie的domain设置为.zyb.com;

    如果要在域A生产一个令域A不能访问而域能访问的Cookie 就要将Cookie设置为test2.zyb.com。

    2、path

    表示cookie所在的目录,定义服务器上的路径,默认为/,即根目录。

    同一服务器上的目录有/test/,/test/aa/,/test/bb/,现设一个cookie1的path为/test/,cookie2的path为/test/aa/,那么test下的所有页面都可以访问到cookie1,而/test/、/test/bb/的子页面不能访问cookie2,只有/test/aa/的子页面可以访问cookie2。

    这是因为cookie只允许其path路径下的页面访问。

    因此一般如果访问一级域名,只需要将path设置为根目录就可以。

    3、Set-Cookie响应头格式

    Set-Cookie: <name>=<value>[; <name>=<value>]...
       [; expires=<date>][; domain=<domain_name>]
       [; path=<some_path>][; secure][; httponly]
    

    如果出现Cookie偶尔失效是什么原因呢?

    只有cookie的domainpath与请求的URL匹配,这个cookie才是有效的。替换cookie时,要保证替换的Cookie具有相同的 host 、 pathname

    Cookie 默认保存位置

    如果项目中使用WebView,自动将Cookie保存在本地数据库中。保存位置:data/data/package_name/app_WebView/Cookies.db

    Cookie保存位置

    cookie内容

    如何设置

    • 针对项目中 一级域名 设置cookie
    /**
     * 同步cookie
     *
     * @param url 地址
     * @param cookieList 需要添加的Cookie值,以键值对的方式:key=value
     */
    private void syncCookie (String url, ArrayList<String> cookieList) {
        CookieSyncManager.createInstance(context);
        CookieManager cookieManager = CookieManager.getInstance();
        cookieManager.setAcceptCookie(true);
        if (cookieList != null && cookieList.size() > 0) {
            for (String cookie : cookieList) {
                    cookieManager.setCookie(url, cookie);
            }
        }
        cookieManager.setCookie(url, "Domain="+url);
        cookieManager.setCookie(url, "Path=/");
        String cookies = cookieManager.getCookie(url);
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
            cookieManager.flush();
        } else {
            CookieSyncManager.getInstance().sync();
        }
    }
    

    这里的url指的是一级域名,比如:.zyb.com

    • 自定义Cookie值
    private static DOMAIN = ".zyb.com"
    private void setAppInfoCookies () {
        ArrayList<String> cookieList = new ArrayList<>();
        cookieList.add("site=android");
        cookieList.add("wak_version=" + getAppVersion);
        syncCookie(DOMAIN, cookieList);
    }
    
    • 相关参数说明

    CookieSyncManager 是个过时的类,Api21 中 WebView 可以自动同步。

    CookieSyncManager.getInstance().sync(); 方法的替代方法是 cookieManager.flush();

    注意: 如果更新Cookie,只有host、name、path都相同时才会更新成功,否则只会在数据库中新添加。

    Cookie的过期机制

    可以设置Cookie的生效时间字段名为: expires 或 max-age

    expires:过期的时间点
    
    max-age:生效的持续时间,单位为秒。
    
    1. 若将Cookie的 max-age 设置为负数,或者 expires 字段设置为过期时间点,数据库更新后这条Cookie将从数据库中被删除。
    2. 如果将Cookie的 max-age 和 expires 字段设置为正常的过期日期,则到期后再数据库更新时会删除该条数据。

    JS获取Cookies

    function getCookie(cookie_name) {
            //获取所有的cookie
            var allcookies = document.cookie;
            //索引长度,开始索引的位置
            var cookie_pos = allcookies.indexOf(cookie_name);
    
            // 如果找到了索引,就代表cookie存在,否则不存在
            if (cookie_pos != -1) {
                // 把cookie_pos放在值的开始,只要给值加1即可
                //计算取cookie值得开始索引,加的1为“=”
                cookie_pos = cookie_pos + cookie_name.length + 1; 
                //计算取cookie值得结束索引
                var cookie_end = allcookies.indexOf(";", cookie_pos);
                
                if (cookie_end == -1) {
                    cookie_end = allcookies.length;
                }
                //得到想要的cookie的值
                var value = unescape(allcookies.substring(cookie_pos, cookie_end)); 
            }
            return value;
    }
    

    最后,希望此篇博客对大家有所帮助,欢迎提出问题及建议共同探讨,如有兴趣可以关注我的博客,谢谢!

    展开全文
  • java后台和php后台如何设置HttpOnly到前台浏览器的cookie中.cookie设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击.zip
  • Chrome Cookie 无法设置 本地Cookie

    千次阅读 2018-04-27 09:00:06
    在 Chrome 66.0.3359.117 版本下,js或者 jquery 设置 cookie时,不要设置 过期时间,如果设置过期时间,Chrome 会认为是不安全设置,无法 发送到服务端,页面刷新后Cookie就会消失。非要设置过期时间,请在 服务端...

    在 Chrome 66.0.3359.117 版本下,js或者 jquery 设置 cookie时,不要设置 过期时间,如果设置过期时间,Chrome 会认为是不安全设置,无法 发送到服务端,页面刷新后Cookie就会消失。非要设置过期时间,请在 服务端设置Cookie过期时间。

    document.cookie = "ding=dong;path=/" ;页面刷新Cookie 仍然在,成功

    document.cookie = "ding=dong;path=/;max-age="+1*60*60*24;页面刷新Cookie 失效,失败


    66.0.3359.139 奇迹的又可以设置了,什么鬼。。。尴尬

    参考:https://stackoverflow.com/questions/335244/why-does-chrome-ignore-local-jquery-cookies/347997#347997

    展开全文
  • 后来改进为使用session存储,ip在服务文件里,不过要把生成的sessionid存储在本地的cookie中,按照ThinkPHP手册说明操作session一切顺利,但是在生成cookie之后,却在本地电脑中找不到cookie文本,原本以为是本地电脑...
  • 前言: 公司的一个 web 端项目,项目放在一级...登录之后接口会设置 cookie ,每次请求都携带 cookie OK,项目基本就这样了,现在说情况: 使用一级域名访问项目,谷歌调试,cookie 存在,项目正常 使用二级域名访问项

    前言:

    公司的一个 web 端项目,项目放在一级域名的某一个目录下方

    访问的时候需输入 一级域名+目录+index.html,这个 index.html 是因为服务端人员没配置默认访问 index.html 所以需要加上

    领导说这个太麻烦,于是弄了个二级域名,直接指向项目目录的 index.html

    接口地址:一级域名+接口

    登录之后接口会设置 cookie ,每次请求都携带 cookie

    OK,项目基本就这样了,现在说情况:

    使用一级域名访问项目,谷歌调试,cookie 存在,项目正常
    使用二级域名访问项目,谷歌调试,cookie 不存在,项目异常

    • 查看二级域名访问请求头,发现请求地址是一级域名,很明显的跨域问题造成的,后台设置的 CORS,前台 axios 设置 withCredentials 为 true,并且前台请求的时候,域名直接写死的一级域名

      由于项目不归我负责,服务端伙计也在忙别的事儿,让人帮忙测试找 BUG 有点慢,所以自己用 nodejs 临时写了一个服务端,模拟它的跨域设置 cookie 情况得知

    • Access-Control-Allow-Origin 不能直接用 *

    • Allow-Origin 的地址前台可访问地址必须一模一样,域名(IP)+端口号

    OK,正常来讲这两个设置好之后,应该能设置上 cookie,但是还是设置不上去,报的是 sameSite 为 none 这个警告,查了一下发现这个是 谷歌浏览器 更新到 80 版本之后加上的,测试:

    • 找一个 50+ 的版本试了一下,能设置上去,但是得用户给浏览器降级, PASS 掉
    • Chrome 中打开 chrome://flags/#same-site-by-default-cookies 和 chrome://flags/#cookies-without-same-site-must-be-secure,并设置为 Enabled,重启浏览器,可以,但是得用户改浏览器设置,PASS掉
    • 前台 VUE 项目开启 https ,成功,这个可以实施,但是 http 的不行有点不完美

    梳理项目需求:

    一级域名可以访问,二级域名也可以访问,接口地址在一级域名,所以那个前端小伙子将接口地址写死了,为的是用二级域名访问的时候,正常访问一级域名的东西

    OK 有思路了,能不跨域的问题,干嘛还跨域啊

    • 前端将写死的域名干掉,默认当前域名就行

    • 二级域名下的 nginx 配置一个 proxy_pass ,接口统一加上一个前缀, ex: manage/接口 ,manage 是识别当前请求的,使用 proxy_pass 代理到一级域名
      注意:这个 proxy_pass=https://一级域名/ 最后的 / 斜杠 不能丢掉,因为接口直接在一级域名下边,不带 manage 这个前缀,proxy_pass 后面的域名加上 / 就代表着将匹配到的前缀干掉了,只要后面的接口

      location ^~ /manage {
          proxy_pass   http://****.cn/;
      }
      
    • 重新打包部署一下项目,用二级域名访问,也不跨域了,cookie问题解决了,http和https都没问题

    新问题:
    一级域名下边项目去登录,请求接口报 404

    梳理一下:

    接口是直接在一级域名下方,没有二级域名访问的时候所谓的前缀,而现在项目在一级域名下的前台访问接口的时候实际上是加上了 manage 前缀的,而一级域名下根本没有什么 一级域名/manage/接口地址 等等接口的

    这样就简单了,一级域名同二级域名一样,做 rewrite ,或者做个 proxy_pass 就行了,将接口的前缀过就过滤掉了

    配置好之后重启 nginx 就好了,现在该项目不存在跨域的问题了,也不用设置什么 CORS 了

    展开全文
  • 如何设置Cookie

    千次阅读 2018-03-25 09:30:52
    简单的查了一下,常用的语言设置...下面的参数大家按照名字去对应,以免语法不同造成的问题1.isHttpOnly通常是最后的参数,即开启全局的Cookie的HttpOnly属性,一般来说建议设置true,具体是如果您在cookie中设...
  • Lumen框架设置cookie

    2019-05-29 18:28:34
    我们首先要引用这两个类 use Illuminate\Support\Facades\Cookie; use Symfony\Component\HttpFoundation\Cookie as SCookie; 我们可以通过如下方法获得...通过如下方法设置cookie值: return response('this ...
  • 前端设置 cookie 用户信息

    千次阅读 2019-02-28 11:25:18
    说明:cookie 用于在本地存储浏览器的信息。当浏览器发送请求时,将cookie共同发送到请求中。服务器可以获取当前用户信息。 document.cookie 即可... * [setCookie 设置 cookie] * @author Michael An * @DateTi...
  • Web页面浏览器端设置JS Cookie缓存

    千次阅读 2019-01-30 15:24:36
    Web浏览器端时常需要缓存一些信息,这时候需要用到cookie,Cookie 是一些数据, 存储于你电脑上的文本文件中。当 web 服务器向浏览器发送 web 页面时,在连接关闭后,服务端不会记录用户的信息。 JavaScript 可以使用 ...
  • webView设置cookie

    千次阅读 2016-06-14 11:39:59
    公司的项目中采用原生加上H5的方式进来开发,遇到的第一个个问题就是给我们的webview设置cookie保存状态。就是将token保存到cookie中去。代码如下: 加载url @Override public void loadUrl() { String index_url ...
  • 在网上找资料,都是说cookie如果设置了secure=true,那么在http请求的时候,这个cookie就不会往后端传递。为了验证这个说法,我自己用springboot搭了一个简单程序,写了一个接口做测试,接口代码如下,很简单 @...
  • eclipse平台的,一个okhttp请求简单封装和cookie管理,比较简便好理解,可以立即使用
  • CefSharp 设置cookie

    千次阅读 2019-01-12 13:46:00
    设置cookie var cookieManager = CefSharp.Cef.GetGlobalCookieManager(); await cookieManager.SetCookieAsync("http://" + domain, new CefSharp.Cookie( { Domain = domain, Name = name,...
  • 微信小程序获取cookie以及设置cookie

    万次阅读 2018-11-27 13:21:52
    小程序开发中我们需要获取到后端给的cookie进行请求验证,但是微信并没有帮我们保存cookie,那么我们要维持会话需要自己来保存cookie,并且请求的时候加上cookie 1.获取cookie 在登录请求后读取 返回值的, header的...
  • nginx设置cookie

    千次阅读 2016-12-25 17:35:39
    实例 ngx.header["Set-Cookie"] = { "userId=" .. userId .. "; Max-Age=7200 ; Path=/; HttpOnly", "orgId=" .. orgId .. "; Max-Age=7200 ; Path=/; HttpOnly" }...
  • .NET CORE 设置cookie以及获取cookie

    千次阅读 2019-10-06 09:37:56
    设置本地cookie /// /// 键 /// 值 /// 过期时长,单位:分钟 protected void SetCookies( string key, string value, int minutes = 30) { HttpContext.Response....
  • 浏览器 cookie 无法设置的原因

    千次阅读 2020-02-25 10:16:32
    场景: 使用 XMLHttpRequest 请求登录 Bug: 浏览器无法自动添加 cookie, ...不同域下的XmlHttpRequest 响应,不论其Access-Control- header 设置什么值,都无法为它自身站点设置cookie值,除非它在请求之前将withC...
  • CEF 设置Cookie

    2019-01-18 10:47:00
    的网站在用户验证成功之后都会设置一个 cookie,只要这个 cookie 存在并可以,用户就可以自由浏览这个网站的任意页面。再次说明,cookie 只包含数据,就其本身而言并不有害。 设置Cookie的失效时间: 如果Cookie...
  • (感觉好尼玛扯淡,,UC自己开发的浏览器竟然不给用户指明开启自己浏览器Cookie的方法,反而指明了IE,谷歌和火狐的开启方法,搞笑吗?)。如图 ![图片说明]...
  • 会话cookie中缺少HttpOnly属性会导致攻击者可以通过程序(JS脚本、Applet等)获取到用户的cookie信息,造成用户cookie信息泄露,增加攻击者的跨站脚本攻击威胁。 HttpOnly是微软对cookie做的扩展,该值指定...
  • cookie设置HttpOnly

    万次阅读 2016-05-20 14:21:20
     如果cookie设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击,窃取cookie内容,这样就增加了cookie的安全性,即便是这样,也不要将重要信息存入cookie。XSS全称Cross Site...
  • 启用cookie的情况下浏览Internet时,网站可以保存您的密码和其他数据(在您同意的情况下),从而使您的浏览体验更加愉悦。 这是在Mozilla Firefox中启用(或禁用)Cookie的方法。 如何在桌面上的Firefox中启用/禁用...
  • 后面就被一个很基础的东西踩了坑,就是 cookie的一些知识,记录一下,加深一下印象。 问题描述: 联调过程中,发现调用登录接口之后,再去调其他接口,就会报登录状态失效,之前做了好久小程序的项目,突然遇到...
  • 这样设置后默认为关闭浏览器后清除该cookie,可是关闭后打开cookie还是没有清除。 后来我发觉我关闭后打开的还是a.html页面,有可能cookie已经清除过了,只是我打开a.html的时候又给它设置了一个一模一样的cookie。 ...
  • qtwebview设置cookie

    千次阅读 2017-03-10 17:02:14
    qtwebview访问设置cookies后的网页因为在python项目中需要用到浏览器显示自动登录后的网页,调用系统浏览器的话暂时没找到什么好的解决方法,这里利用qt的webview来实现浏览器展示登录后的网页。我是用requests进行...
  • 用于禁用/启用 cookie 的实用程序。 cookie . disable ( ) ; document . cookie = 'foo=baz' ; document . cookie ; // => "" cookie . enable ( ) ; document . cookie = 'foo=baz' ; document . cookie ; ...
  • nginx设置cookie点滴感悟

    万次阅读 2017-02-06 10:22:53
    公司有一个简单需求:利用nginx的ngx_http_auth_request_module模块设计一个鉴权接口,将鉴权接口返回的字符串赋值给$trueValue,设置cookie的Value中。  面对这个简单需求,首先,去百度搜索nginx、cookie等...
  • 设置其值为1或者TRUE,来开启全局的Cookie的HttpOnly属性,当然也支持在代码中来开启: <?php ini_set("session.cookie_httponly", 1); // or session_set_cookie_params(0, NULL, NULL, NULL, TRUE

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 114,656
精华内容 45,862
关键字:

如何设置开启cookie