Home > php教程 > PHP源码 > 浅析php中session和cookie的区别和联系

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

WBOY
Release: 2016-06-08 17:23:41
Original
962 people have browsed it

在php中session和cookie其实是没什么关系了,但是区别还是很大的,下面我来给各位同学介绍session和cookie的区别和联系.

<script>ec(2);</script>


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

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

    name:cookie中定义的名字。

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

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

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

    domian:cookie可用的域名范围。

setcookie('site_name', 'IT博客');//设置一个cookie:site_name他的值是IT博客,这样就建立了一个会话,不过这个cookie保存在了内存中随着浏览器的关闭而销毁。
setcookie('site_name', 'IT博客', time() + 86400);//设置cookie并将他的过期时间设置为一天后,这样的会话会将cookie的值保存到硬盘中,关闭浏览器,一天内cookie在浏览器打开的时候还是有效的。
?>     写到这里想起了以前同事在项目中遇到的问题:比如我有一个功能用户浏览的前10个页面我要在页面中显示用于提示用户浏览过的页面,这里面就用到了cookie,用户浏览的页面大于10个之后会做分割只取前10个,array_slice可以帮到你,array_slice切割完之后cookie中保存的页面信息是不是减少了呢?可能会有这个疑问。带着这个疑问咱们说说cookie的销毁方式吧。

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

setcookie('site_name', '');
?> cookie销毁方式二:将cookie值设置为过期时间。

setcookie('site_name', 'IT博客', time() - 86400);
?>     看到这里你说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传递。


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

Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template