为什么第一次无法获取cookie

首先编写以下简单的代码:

<?php
    setcookie(‘a‘,‘value‘);
    print $_COOKIE[‘a‘];

第一次访问时,报错:

报错的原因是$_COOKIE[‘a‘]的值不存在。

第二次访问:

问:为什么第一次访问的时候,会没有cookie呢??我不是先设置,再获取吗??

答:使用firefox的firebug查看”网络“:

客户端:

可以看到,浏览器(客户端)向服务器发出一次请求,发出请求的时候,在请求头信息中带上了各种参数,告诉服务器,我要接收什么样的文本(Accept)、什么编码格式(Accept-Encoding)、什么语言(Accept-Language)等等,当然,还把Cookie也传到了服务器(Cookie)。

服务器端:

第一步:setcookie(‘a‘,‘value‘)

因为cookie是设置在客户端的,setcookie函数自己并不能设置cookie,它只能通过头信息的方式告诉浏览器说:兄弟,我要设置一个cookie,键为a,值为value,你在你那里帮我设置一下。你也可以理解为:”来,朕今天高兴,赏你一个小甜饼“。

第二步:$_COOKIE[‘a‘]

$_COOKIE[‘a‘]很简单,执行的操作就是在浏览器带过来的cookie字符串中搜索键为a的cookie,并返回它的值

很明显,这个”键为a“的cookie不可能找到,因为客户端访问服务器的时候,这个cookie压根就不存在,而前面第一步设置cookie的头信息,也还没有返回给客户端(php要从上到下把语句执行完才会返回给客户端)

第三步:服务器返回信息

其中,返回的头信息中带有”Set-Cookie a=value“,浏览器收到这个头信息,把cookie存放到电脑的某个文件中,对于不同浏览器cookie的存放位置貌似不同,这个不在本文的范围。

刷新浏览器,再次访问服务器的时候,同样,也会把很多头信息带给服务器,只不过这次带过去的cookie中,就多了一个a=value了。所心$_COOKIE[‘a‘]自然就能从cookie字符串中找到这个键为a的cookie的值。

来自为知笔记(Wiz)

时间: 2024-11-08 21:07:36

为什么第一次无法获取cookie的相关文章

用WebCollector 2.x爬取新浪微博(无需手动获取cookie)

用WebCollector 2.x 配合另一个项目WeiboHelper,就可以直接爬取新浪微博的数据(无需手动获取cookie) 1.导入WebCollector 2.x和WeiboHelper的所有jar包 两个项目的地址:http://git.oschina.net/webcollector/WebCollector http://git.oschina.net/webcollector/WeiboHelper 2.示例代码: package cn.edu.hfut.dmic.webcol

【学习笔记】JavaScript设置与获取Cookie

获取Cookie: 1 function getCookie(cookiename) { 2 var result; 3 var mycookie = document.cookie; 4 var start2 = mycookie.indexOf(cookiename + "="); 5 if (start2 > -1) { 6 start = mycookie.indexOf("=", start2) + 1; 7 var end = mycookie.i

设置cookie、获取cookie、删除cookie函数封装

//设置cookie函数function setCookie(key,value,t){   var oDate = new Date();   oDate.setDate( oDate.getDate() + t );   document.cookie = key + '=' + encodeURI(value) + ';expires=' + oDate.toGMTString();} //获取cookie函数function getCookie(key){ //通过分号空格拆分开所有co

如何使用js来获取cookie的值

如何使用js来获取cookie的值 读取属于当前文档的所有cookies var allcookies = document.cookie; 定义一个函数,用来读取特定的cookie值. function getCookie(cookie_name) { var allcookies = document.cookie; var cookie_pos = allcookies.indexOf(cookie_name);   //索引的长度 // 如果找到了索引,就代表cookie存在, // 反

js获取cookie值

js获取cookie值,代码如下: 1 function getCookie(key) { 2 var arr = document.cookie.split(';'); 3 var obj = new Object(); 4 for(var i = 0; i < arr.length; i++) { 5 var tmp = arr[i].split('='); 6 obj[tmp[0]] = tmp[1]; 7 } 8 return obj[key]; 9 } 调用: 1 alert(getC

javascript设置和获取cookie值

//设置cookie function setCookie(name,value,expires,path,domain,secure){ var cookieName = encodeURIComponent(name) + '=' + encodeURIComponent(value); if(expires instanceof Date){ cookieName += ';expires=' + expires; } if(path){ cookieName += ';path=' +

jQuery获取cookie

之前一直以为获取cookie的方法封装在了jQuery包中...没想到还得单独下jquery.cookie.js插件,不太好找,备份一份: /*! * jQuery Cookie Plugin v1.4.1 * https://github.com/carhartl/jquery-cookie * * Copyright 2013 Klaus Hartl * Released under the MIT license */ (function (factory) { if (typeof de

javascript设置和获取cookie的通用方法

//获取cookie  function getCookieValue(cookieName)  {     var cookieValue = document.cookie;     var cookieStartAt = cookieValue.indexOf(""+cookieName+"=");     if(cookieStartAt==-1)     {         cookieStartAt = cookieValue.indexOf(cooki

PHP获取Cookie模拟登录

一.定义Cookie存储路径 必须使用绝对路径 $cookie_jar = dirname(__FILE__)."/pic.cookie"; //$cookie_file = dirname(__FILE__).'/cookie.txt'; //$cookie_file = tempnam("tmp","cookie"); 二.获取Cookie $url = "http://1.2.3.4/"; $ch = curl_init