1、Cookie和Session简介与区别

在非常多时候,我们需要跟踪浏览者在整个网站的活动,对他们身份进行自动或半自动的识别(也就是平时常说的网站登陆之类的功能),这时候,我们常采用Cookie与 Session来跟踪和判断。

区别

Session信息是存放在server端,但session id是存放在client cookie的,当然php的session存放方法是多样化的,这样就算禁用cookie一样可以跟踪

Cookie是完全保持在客户端的如:IE firefox 当客户端禁止cookie时将不能再使用

2、Cookie的配置与应用

Setcookie(string name, string value, int expire,string path, string domain, int secure); 

其中name是cookie变量名称标识,你在php中将能象使用普通变量名相同来用他引用cookie变量。value是cookie变量的初始值,expire 表示该cookie变量的有效时间;path 为该cookie变量的相关路径;domain 表示cookie变量的网站;secure 则需在 https 的安全传输时才有效。

SetCookie("Cookie", "cookievalue",time()+3600, "/forum", ".php100.com", 1);

接收和处理Cookie
PHP对Cookie的接收和处理的支持非常好,是完全自动的,跟FORM变量的原则一样,特别简单。
比如设置一个名为 MyCookier的Cookie,PHP会自动从WEB服务器接收的HTTP头里把它分析出来,并形成一个与普通变量一样的变量,名为$ myCookie,这个变量的值就是Cookie的值。数组同样适用。另外一个办法是引用PHP的全局变量$HTTP_COOKIE_VARS数组。
分别举例如下:(假设这些都在以前的页面里设置过了,并且仍然有效)

echo $MyCookie;
echo $CookieArray[0];
echo $_COOKIE["MyCookie"];
echo $HTTP_COOKIE_VARS["MyCookie"]; 

删除Cookie

要删除一个已经存在的Cookie,有两个办法:

1、SetCookie("Cookie", "");
2、SetCookie("Cookie", "value" , time()-1 / time() );

使用Cookie的限制

1、必须在HTML文件的内容输出之前设置;
2、不同的浏览器对Cookie的处理不一致,且有时会出现错误的结果。
3、限制是在客户端的。一个浏览器能创建的Cookie数量最多为30个,并且每个不能超过4KB,每个WEB站点能设置的Cookie总数不能超过20个。

3、Session的配置与应用

session_start();                    //初始化session.需在文件头部$_SESSION[name]=value;  //配置Seeeionecho $_SESSION[name];    //使用sessionisset($_SESSION[name]);   // 判断unset($_SESSION[name]);   //删除session_destroy();             //消耗所有session

注意:session_register(),session_unregister,session_is_registered在php5下不再使用

//cookies用法实例

if($_GET['out'])
{   //用于注销cookiessetcookie('id',"");setcookie('pass',"");echo "<script>location.href='login.php'</script>"; //因为cookies不是及时生效的,只有你再次刷新时才生效,所以,注销后让页面自动刷新。
}if($_POST['name']&&$_POST['password']) //如果变量用户名和密码存在时,在下面设置cookies
{   //用于设置cookiessetcookie('id',$_POST['name'],time()+3600);setcookie('pass',$_POST['password'],time()+3600);echo "<script>location.href='login.php'</script>"; //让cookies及时生效

}
if($_COOKIE['id']&&$_COOKIE['pass'])
{   //cookies设置成功后,用于显示cookiesecho "登录成功!<br />用户名:".$_COOKIE['id']."<br/>密码:".$_COOKIE['pass'];echo "<br />";echo "<a href='login.php?out=out'>注销cookies</a>";  //双引号内,如果再有引号,需要用单引号。
}?>
<form action="" method="post">
用户ID:
<input type="text" name="name" /><br/><br/>
密码:
<input type="password" name="password" /><br/><br />
<input type="submit" name="submit">
</form>

//session用法实例

<?php
//session用法实例
session_start();//启动session,必须放在第一句,否则会出错。
if($_GET['out'])
{unset($_SESSION['id']);unset($_SESSION['pass']);
}if($_POST['name']&&$_POST['password'])
{   //用于设置session$_SESSION['id']=$_POST['name'];$_SESSION['pass']=$_POST['password'];
}if($_SESSION['id']&&$_SESSION['pass'])
{echo "登录成功!<br/>用户ID:".$_SESSION['id']."<br />用户密码:".$_SESSION['pass'];echo "<br />";echo "<a href='login.php?out=out'>注销session</a>";
}?>
<form action="login.php"  method="post">
用户ID:
<input type="text" name="name" /><br/><br/>
密码:
<input type="password" name="password" /><br/><br />
<input type="submit" name="submit">
</form>

另一篇

在一个页面设置一个cookie时,必须刷新或到下一个页面才可以用 $_COOKIE 得到变量的值.
原因是因为当页面第一次被浏览器访问载入时,页面中的 cookie 会被设置,将其发送存储到客户端指定的存储位置,所以$_COOKIE没有接收到客户端发送过来的 cookie 变量的值,当刷新或到下一个页面时,客户端会在页面程序在服务器端运行之前,发送与该地址相对应的 cookie到服务器端,所以 $_COOKIE 可以得到的值! 说白了就是当每一个页面被访问时,如果客户端找到了与访问地址相对应的 cookie 时,会在程序在服务器端运行之前发送这个 cookie 到服务器端. (个人对此的看法)
本人表达能力不强,如有不明,还请抱歉!

php中设置cookie数组的时候,不可以用像php中的那个添加数据的方法:

<?php
setcookie('my_cookie[]', 1);
setcookie('my_cookie[]', 2);
print_r($_COOKIE);    // Array ( [my_cookie] => Array ( [0] => 1 )) // 数组的值添加是添加成功了,不过索引没有变,后面的数据将前的数据覆盖了!
由此得到my_cookie[],默认指向数据的第一元素的位置,即索引为
0 的位置. 注意与php中的不一样! 以后用cookie数据记住要指定数组元素索引哦!$my_cookie[] = 1;
$my_cookie[] = 2;
print_r($my_cookie); //Array ( [0] => 1 [1] => 2)
?>

删除 cookie 变量的两个方法:

//1
<?php
setcookie('user_name_1', 'zhaofei299', time()+3600); // 生存期为 1 个小时
setcookie('user_name_2', 'ZHAOFEI299', time()+3600); // 生存期为 1 个小时
?>
//2<?php
setcookie('user_name_1');                // 第一种
setcookie('user_name_2', "", time()-1); // 第二种
print_r($_COOKIE);                       // 刷新页面2下以上会输出 Array ( [user_name_1] => )/*为什么超级全局变量 $_COOKIE 中的 user_name_1 没有被删除(变量为空并不代表不存在),而
user_name_2被删除了? 那是因为两个删除变量的方式不同!
第一种: 是设置了 cookie 的生存期, 只不过是将它的值默认设置为空,生存期为与浏览器一样,浏览器
关闭时,cookie才会删除!所以当重新打开一个浏览器,输出地址时,才会发现 cookie 变量全部被删除了!
将2.php 中两个 setcookie() 函数部分注释掉看看(重新输出了地址)!
第二种: 也是设置了 cookie 的生存期,是使 cookie 的生存期一定过期, cookie 也就被删除,所以刷
新页面,客户端向服务器端发送 cookie 时, $_COOKIE 并没有能够得到该cookie变量的值!
*/
?>

会话id默认储放在客户端Cookie中!

<?php
session_start();
print_r($_COOKIE);
?>

cookie的设置有两种方法
header('set-cookie:user=zhaofei299');
setcookie('user', 'zhaofei299');
会话变量不能被GET数据或POST数据重载!
使用session变量传递数组,对象时无需序列化!
使用session变量传递对象时,在调用session_start()之前,必须包含该对类对象的定义,反序列化
(serialize)也是如此!
删除单个会话变量可以使用unset($_SESSION['***']) 直接删除!
删除所有的会话变量不可以用unset($_SESSION),因为这样会将所有的会话信息删除,包含存储在COOKIE
中的PHPSESSID,也就是破坏了两个页面之间的会话联系,应该使用$_SESSION = array();
消除会话id,使页面之间失去联系!
session_destroy();
程序清单1.1

<?php
session_start();
header('content-type:text/html;charset=utf-8');
$_SESSION['a'] = 'a';
$_SESSION['b'] = 'b';
unset($_SESSION);        //测试后,再注释下看看
$_SESSION['user'] = 'zhaofei299';
echo 'SESSION_ID: '.session_id().'<br />';
echo '<a href="3.php" target="_blank">测试下</a>';
?><?php
session_start();
echo $_SESSION['user'];
echo session_id();         //会话变量改变了
?>

会话id(session_id)的两种方式传递:
1.cookie
2.url
因为默认session是基于cookie的,而cookie又是跟随http协议发送的,所以与cookie一样,在
session_start()之前不能有任何输出!
现在主要说一说第二种,通过 url 传递会话id
php中已经定义SID这个常量来得到 会话的id
sesssin_id 的使用!

<?php
session_start();
echo defined('SID')?'true':'false'; // true
echo SID; //什么也没有?
?>

为什么SID的值会是null 呢?是它哪里有问题了?
原因是因为 session 默认是基于 cookie 的,而 SID 只有 session_id 通过 url
传递数据时才会被赋值!
在浏览器中将 cookie 禁用,你就会发现 SID 有了输出,而不是 null!
删除session
要三步实现.

<?php
session_destroy();                         // 第一步: 删除服务器端session文件,这使用
setcookie(session_name(),'',time()-3600); // 第二步: 删除实际的session:
$_SESSION = array();                       // 第三步: 删除$_SESSION全局变量数组
?>

大家都知道session变量是保存在服务器端的,也就是说session的变量会保存在服务器中一个目录中,我
们可以在php.ini中的session.save_path 那里可以找到session文件中保存的地址.

默认的session的生存期是浏览的关闭就结束,但要知道会话过期结束后,当打开页面session_start()会
判断会话id 是否存在,如果不存在就创建一个,否则将该会话id 的变量载入页面!因为过期session_id会
被创建一个新的,但它保存在服务器端的session文件并没有被删除(关闭浏览器,打开session文件保存
地看看),所以要用session_destory()函数清除会话id,并同时清除相应的会话文件,这样的话才能做到最
彻底的清除!

session_id 使用 url 传递session 变量数据时,因为session_start()开启会话时会判断会话id 是否存
在,如果不存在就创建一个,否则将该会话id 的变量载入页面!

而现在是使用url 来传递session_id,然而每一次 刷新/进入页面 都会生成一个会话id,所以页面之间就
不能得到在另一页面设置过的session_id 的变量,那么使用 session也就没什么意义了!

解决方法:在session_start()之前,手动设置页面的session_id,这样页面的就可以得到前一页中所设置的
session变量的,也就实现了会话的传递,如下代码可以说明!
//已禁用 cookie
1.php

<?php
session_start();
$_SESSION['user'] = 'zhaofei299';
echo '<a href="2.php?'.SID.'">下一页</a>';
?>

1.php的第4行代码也可以写成:echo '<a href="2.php">下一页</a>';
可以设置php.ini 中的 session.use_trans_sid 为1,这样当使用 url 传递会话 id 时,
浏览器会自动将 session_id 追加到 url 的后面!
就好像 在浏览器中 输入: www.baidu.com 一样,浏览器会自动将其更换成 http://www.baidu.com/

2.php

<?php
session_id($_GET['PHPSESSID']);   // 手动设置session_id,这种就可以使用前一个页面的
session_id 的变量了,也就实现了会话!
session_start();
print_r($_SESSION);
?>

常用session函数:

bool   session_start(void); 初始化session
bool   session_destroy(void): 删除服务器端session关联文件。
string session_id() 当前session的id
string session_name() 当前存取的session名称,也就是客户端保存session ID的cookie名称.默认
PHPSESSID。
array session_get_cookie_params() 与这个session相关联的session的细节.
string session_cache_limiter() 控制使用session的页面的客户端缓存
ini    session_cache_expire() 控制客户端缓存时间
bool   session_destroy()     删除服务器端保存session信息的文件
void   session_set_cookie_params ( int lifetime [, string path [, string domain [, bool
secure [, bool httponly]]]] )设置与这个session相关联的session的细节
bool session_set_save_handler ( callback open, callback close, callback read, callback
write, callback destroy, callback gc )定义处理session的函数,(不是使用默认的方式)
bool session_regenerate_id([bool delete_old_session]) 分配新的session id  

转载于:https://www.cnblogs.com/zyh-club/p/4993318.html

Cookie和Session简介与区别相关推荐

  1. COOKIE与SESSION的真正区别在哪?

    COOKIE与SESSION比较 1.HTTP协议本身是无状态的. 我们上网都要靠HTTP协议传递信息.比如我们在浏览器里键入:www.sanyalanhua.com这个网址并回车,你会发现网址会变成 ...

  2. 网络:.cookie和session原理及区别

    一.Cookie详解 (1)简介 因为HTTP协议是无状态的,即服务器不知道用户上一次做了什么,这严重阻碍了交互式Web应用程序的实现.在典型的网上购物场景中,用户浏览了几个页面,买了一盒饼干和两饮料 ...

  3. 前端页面——Cookie与Session有什么区别

    我们在实际生活中总会遇到这样的事情,我们一旦登录(首次输入用户名和密码)某个网站之后,当我们再次访问的时候(只要不关闭浏览器),无需再次登录.而当我们在这个网站浏览一段时间后,它会产生我们浏览的记录, ...

  4. 详解COOKIE和SESSION关系和区别

    (转自个推,理解起来不难) 在技术面试中,经常被问到"说说Cookie和Session的区别",大家都知道,Session是存储在服务器端的,Cookie是存储在客户端的,然而如果 ...

  5. 什么是cookie?什么是session?cookie与session有什么区别

    cookie与session的由来: 网址的发展史:1.起初网站都没有保存用户功能的需求,所有用户访问返回的结果都是一样的.比如:新闻网页,博客网页,小说... (这些网页是不需要登录后才能访问的,每 ...

  6. 详解cookie和session之间的区别与联系

    Cookie 什么是 Cookie HTTP 是无状态的协议(对于事务处理没有记忆能力,每次客户端和服务端会话完成时,服务端不会保存任何会话信息) 每个HTTP请求都是完全独立的,服务端无法确认当前访 ...

  7. Cookie、Session 和 Token区别

    1 Cookie.Session 和 Token 都是用来做持久化处理的,目的就是让客户端和服务端相互认识.Http 请求默认是不持久的没有状态的,谁也不认识谁. 2 Cookie: 是存放在客户端的 ...

  8. COOKIE和SESSION关系和区别

    一.cookie介绍 cookie 常用于识别用户.cookie 是服务器留在用户计算机中的小文件.每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie.通过 PHP,您能够创建并取回 c ...

  9. Cookie与 Session使用详解

    1.Cookie和Session简介与区别 在非常多时候,我们需要跟踪浏览者在整个网站的活动,对他们身份进行自动或半自动的识别(也就是平时常说的网站登陆之类的功能),这时候,我们常采用Cookie与 ...

最新文章

  1. 又一重磅嘉宾来袭 | 国际人工智能联合会理事长杨强助阵2018品友互动人工智能大会
  2. PXE部署映像(WinPE 2.0)
  3. 如何干掉恶心的 SQL 注入?
  4. 进程通信学习笔记(管道)
  5. html分为哪两种,css伪类分为哪几种
  6. 申通快递机器人上岗_申通快速分拣机器人未来有70%人会失业
  7. 在2017年从Maven工件生成P2存储库
  8. 【牛客 - 368C】流星雨(概率dp,乘法逆元)
  9. 安装ssd后不识别网卡_100元体验纯正万兆网络:需要安装SSD的NAS服务器
  10. 怎样设置电脑壁纸_怎样设置电脑的资料定时备份到移动硬盘里
  11. [译]编写高性能对垃圾收集友好的代码
  12. cnpm 网络不能连接_5G网络那么牛,能打电话吗?(连载二)
  13. python必备基础代码-新手上路必学的Python函数基础知识,全在这里了(多段代码举例)...
  14. Codeforces1106F 【BSGS】【矩阵快速幂】【exgcd】
  15. [linux]tcpdump抓包
  16. JavaScript:设置网站title
  17. java多线程Thread.sleep方法用法详解
  18. html实现酷狗歌词,酷狗音乐怎么制作歌词?酷狗音乐制作歌词的方法
  19. html涟漪动画效果,css3点击显示涟漪特效
  20. 如何用p5js做一个可爱的鲶鲶并添加不倒翁效果

热门文章

  1. python位置参数ppt_如何在Python中使用一个或多个相同的位置参数?
  2. C语言和指针的本质是什么?技术大神给出答案
  3. socket io 不使用redis_Redis这么快,线程模型竟然是单线程
  4. 变频器服务器电路板维修,变频器线路板常见维修方法
  5. 判断frame是否已创建_类的创建
  6. classcastexception异常_优雅的异常处理
  7. chrome 占用大量内存直到网页崩溃_Chrome吃内存太夸张!几招解决Chrome占内存硬伤...
  8. 一文读懂视频监控系统全过程内容
  9. 安防专用交换机的应用介绍
  10. 【渝粤教育】国家开放大学2018年秋季 2083T信息技术与教育技术(2) 参考试题