网站地图    收藏   

主页 > php专栏 > 流程控制语句 >

浅析php中session和cookie的区别和联系 - php会话

来源:自学PHP网    时间:2014-11-27 22:01 作者: 阅读:

[导读] 首先谈谈cookie吧,百度百科是这样定义的:是网站为了辨别用户身份、进行session跟踪而存储在用户本地终端上的数据,通常经过加密 php中生成一个cookie的方法很简单:setcookie(name,value,expire,...

浅析php中session和cookie的区别和联系

首先谈谈cookie吧,百度百科是这样定义的:是网站为了辨别用户身份、进行session跟踪而存储在用户本地终端上的数据,通常经过加密.

php中生成一个cookie的方法很简单:setcookie(name,value,expire,path,domain);

name:cookie中定义的名字.

value:cookie中对name所保存的值,这个值保存在了用户的终端,不要保存敏感信息(个人重要信息,金钱).

expire:cookie中名值对保存的过期时间,这个值是以时间戳的形式保存下来的.

path:cookie值保存的有效路径,如果设置成 ‘/’ 那么对整个项目都有效,如果设置成 ‘/foo/’ 那么cookie的有效路径在foo以及其下属文件,如果没有做任何设置那么他的有效路径是当前文件夹.

domianLcookie可用的域名范围.

PHP实例代码如下:

  1. <?php 
  2. setcookie('site_name''IT博客');//设置一个cookie:site_name他的值是IT博客,这样就建立了一个会话,不过这个cookie保存在了内存中随着浏览器的关闭而销毁。 
  3. setcookie('site_name''IT博客', time() + 86400);//设置cookie并将他的过期时间设置为一天后,这样的会话会将cookie的值保存到硬盘中,关闭浏览器,一天内cookie在浏览器打开的时候还是有效的。 
  4. ?> 

写到这里想起了以前同事在项目中遇到的问题:比如我有一个功能用户浏览的前10个页面我要在页面中显示用于提示用户浏览过的页面,这里面就用到了cookie,用户浏览的页面大于10个之后会做分割只取前10个,array_slice可以帮到你,array_slice切割完之后cookie中保存的页面信息是不是减少了呢?可能会有这个疑问,带着这个疑问咱们说说cookie的销毁方式吧.

cookie销毁方式一:将cookie值设置为空.

  1. <?php 
  2. setcookie('site_name'''); 
  3. ?> cookie销毁方式二:将cookie值设置为过期时间。 
  4. <?php 
  5. setcookie('site_name''IT博客', time() - 86400); 
  6. ?> 

看到这里你说array_slice会不会切割cookie中的值,使cookie的值减少呢?

下面说一说session:session是一种服务器的机制,服务器使用一种类似于散列表的结构来保存信息,每一个网站的访客都会被赋予一个唯一的标识符进行识别(回话ID),他的存放形式有两种:1是url传递,2是cookie保存.

php中常用的session的函数中最重要的就是session_start(),没有开启session的话一切都免谈.

php.ini中也有一些session的设置比如:

session.save_handler = files —— session的保存形式以文件形式保存.

session.save_path = “N;/path” ——— session文件的保存路径,这个路径需要自己创建且有写入的权限,其中N;/path中的N必须是一个整数这样可以使session文件保存在不同的目录中,这对于服务器处理大量的session文件是有帮助的.

session和cookie的区别:

1.session保存在服务器端,通过session.save_path可以设置session文件在服务器的位置.

2.cookie保存在客户端,分为临时会话(关闭浏览器则销毁,保存在内存)、持久性会话(在有效期内一直可以调用,保存在硬盘上).

3.session相对cookie要安全一些,不过大量的session也会导致服务器的压力.

session和cookie的联系:

session的有效执行有两种方式:一是与cookie进行交互,二是通过url传递.

提示:sessionid是一个很有用有时候也会导致问题的一个标识,有一次通过ajax发送50多个请求通过socket请求数据,在php端socket返回数据有时候会比较慢,虽然ajax是异步的请求但是在php端就不一样了,先来的会把后来的请求堵在后面,其中的标识符就是sessionid,由于这个sessionid导致了php端的顺序处理增加了用户的等待时间,致使用户体验较差,其中的解决方案是用session_write_close()断开sessionid的链接.

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论