不论是在使用cookie方式存储,在网站中跟踪一个

时间:2020-03-13 05:03来源:美高梅手机游戏网站
本文实例讲述了PHPcookie与session会话基本用法。分享给大家供大家参考,具体如下: 本文实例讲述了PHP的cookie与session原理及用法。分享给大家供大家参考,具体如下: 本文介绍了PHP会话

本文实例讲述了PHP cookie与session会话基本用法。分享给大家供大家参考,具体如下:

本文实例讲述了PHP的cookie与session原理及用法。分享给大家供大家参考,具体如下:

本文介绍了PHP会话控制,主要阐述以下几点内容:

cookie即是传统的会话控制,由于要存储的信息是保存在客户端的,所以安全系数较低,而session会话控制是将要存储的信息保存在服务器上的,所以相对于cookie安全系数较高.

产生背景

• 会话控制的产生背景/概念• cookie的维护与生命周期• session的维护与生命周期• cookie与session之间的区别与联系• 问题1:禁用cookie后session为什么会失效?• 问题2:IE浏览器下丢失session,每次刷新页面,都会生成新的sessionID• session、cookie简单实例

不论是在使用cookie方式存储,还是session方式存储在使用存储的函数之前都不能有输出语句,否则会产生一个e级错误

HTTP协议是无状态的协议。一旦数据交换完毕,客户端与服务器端的连接就会关闭,再次交换数据需要建立新的连接。这就意味着服务器无法从连接上跟踪会话。于是需要引入一种机制,COOKIE于是就顺应而生。

理解会话控制的概念

使用cookie的存储的方式

Session是另一种记录客户状态的机制,不同的是Cookie保存在客户端浏览器中,而Session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上。这就是Session。

理解一个概念就需要理解他的背景及产生的原因,这里引入WEB环境及其HTTP协议。会话控制产生的背景:阅读过HTTP协议相关资料的同学都会知道HTTP协议是WEB服务器与客户端相互通信的协议,它是一种无状态协议,所谓无状态,指的是不会维护http请求数据,http请求是独立的,不持久的。也就是说HTTP协议没有一个内建的机制来维护两个事务之间的状态或者说是关系吧。当一个用户在请求一个页面后再去请求另外一个页面时,HTTP将无法告诉我们这两个请求是否来自同一个用户。

setcookie('cookie_name','cookie_value',cookie_time);

理解例子

由此我们就会觉得很奇怪了,平时我们在论坛逛帖子或电商网站购物时,只要我们在这个站点内,不论我们怎么跳转,从一个页面跑到另一个页面,网站总会记得我是谁,比如告诉你购买了哪些东西。这是怎么做到的呢,估计大家猜到了,这就是运用了HTTP会话控制。在网站中跟踪一个变量,通过对变量的跟踪,使多个请求事物之间建立联系,根据授权和用户身份显示不同的内容、不同页面。

在之后还有两个参数,忘记是什么使用方法了姑且就这样吧

以前大学的时候,经常去大卡司去喝奶茶,每喝一杯,都可以得到一个印花,集齐6个印花之后,就可以免费获得一杯奶茶。这样子,印花的信息是保存在客户的积分卡上,你如果不怀好意的话,就自己搞几个神似的印花去骗奶茶喝吧。哈哈,这样子是不是更符合在客户端端保持状态。而拿银行卡去银行取钱,我们的卡只需要保存一个卡号,更多的信息是保存在服务器中,这样也比较符合服务器端保持状态。

PHP Session会话控制:

使用session的存储方式

具体来说cookie机制采用的是在客户端保持状态的方案,而session机制采用的是在服务器端保持状态的方案。同时我们也看到,由于采用服务器端保持状态的方案在客户端也需要保存一个标识,所以session机制可能需要借助于cookie机制来达到保存标识的目的,

PHP的session会话是通过唯一的会话ID来驱动的,会话ID是一个加密的随机数字,由PHP生成,在会话的生命周期中都会保存在客户端。我们知道客户端保存数据的地方只有cookie,所以PHP的会话ID一般保存在用户机器的cookie中。了解cookie后我们知道,浏览器是可以禁用cookie的,这样会话就会失效。所以PHP会话控制还有一种模式,就是在URL中传递会话ID。如果在浏览网站时我们稍加留心的话,有些URL中有一串看起来像随机数字的字符串,那么其实很有可能就是URL形式的会话控制。

session_start;

简述cookie

讲到这里,有些人可能会有疑问了,客户端只是保存一个会话ID,那么会话控制中保存的会话变量比如你购物时买的物品列表等,它们是存放在哪个地方的呢?很显然,会话变量是在服务器端使用的,那么这些会话变量必定存放在服务器端。默认情况下,会话变量保存在服务器的普通文件中(也可以自己配置使用数据库来保存,可以Google一下),会话ID的作用就像是一把钥匙,在服务器端保存会话的文件中找到该会话ID对应的会话变量,比如购买物品的列表。

当用户一次执行到session_start()这个函数时,会产生一个session_id会复制一份,一份作为文件名,保存在服务器上,一份作为字符串保存给客户端的session_name()的文件下,当用户第二次执行到sessio_start()的时候用户是带着自己的session_id()多来的,然后当我们需要使用到session的时候,客户端会拿着自己的session_id()在服务器上找与自己手上的session_id,然后打开文件。

PHP工作原理:PHP通过setcookie函数进行Cookie的设置,任何从浏览器发回的Cookie,PHP都会自动的将他存储在$_COOKIE的全局变量之中,因此我们可以通过$_COOKIE['key']的形式来读取某个Cookie值。

那么会话控制的整个过程可能就像这个样子,用户登录或者第一次浏览某个站点的页面时,该站点会生成一个PHP的会话ID并通过cookie发送到客户端。当用户点击该站点的另一个页面时,浏览器开始连接这个URL。在连接之前,浏览器会先搜索本地保存的cookie,如果在cookie中有任何与正在连接的URL相关的cookie,就将它提交到服务器。而刚好在登陆或第一次连接时,已经产生了一个与该网站URL相关的cookie,所以当用户再次连接这个站点时,站点就可以通过这个会话ID识别出用户,从服务器的会话文件中取出与这个会话ID相关的会话变量,从而保持事务之间的连续。

下面是index.php

用途:PHP中的Cookie具有非常广泛的使用,经常用来存储用户的登录信息,购物车等,且在使用会话 Session时通常使用Cookie来存储会话id来识别用户,Cookie具备有效期,当有效期结束之后,Cookie会自动的从客户端删除。同时为 了进行安全控制,Cookie还可以设置域跟路径。

接下来我们了解下两个重要的概念:cookie和session

下面是index_a.php

函数Cookie

关于cookie的维护与生命周期

';echo $_SESSION['age'];}else{header;//如果不存在session则跳转到页面index.php}?>

PHP设置Cookie最常用的方法就是使用setcookie函数,setcookie具有7个可选参数,我们常用到的为前5个:

cookie是在服务器端被创建并写回到客户端浏览器,浏览器接到响应头中关于写cookie的指令则在本地临时文件夹中。

那么我们注册了一个会话之后我们怎么去删除这个会话呢?

name可以通过$_COOKIE['name'] 进行访问 value expireUnix时间戳格式,默认为0,表示浏览器关闭即失效 path如果路径设置为'/',则整个网站都有效 domain默认整个域名都有效,如果设置了'www.imooc.com',则只在www子域中有效

创建了一个cookie文件,其中保存了你的cookie内容,cookie内容的存储是键值对的方式,键和值都只能是字符串。例如:文件:Cookie:administrator@localhost/内容格式:voteID100101localhost/15361167667230343893360385046430343691*

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP中cookie用法总结》、《php缓存技术总结》、《PHP数组操作技巧大全》、《PHP网络编程技巧总结》及《php字符串用法总结》

$value = 'test';setcookie;setcookie("TestCookie", $value, time; //有效期一小时setcookie("TestCookie", $value, time()+3600, "/path/", "imooc.com"); //设置路径与域

复制代码 代码如下:setcookie()函数设置cookie,函数原型如下setcookie(name, value, expire, path, domain);

希望本文所述对大家PHP程序设计有所帮助。

PHP中还有一个设置Cookie的函数setrawcookie,setrawcookie跟setcookie基本一样,唯一的不同就是value值不会自动的进行urlencode,因此在需要的时候要手动的进行urlencode。

注释:cookie标题头必须在发送其他标题头之前发送,否则就无效(这是cookie的限制,而不是PHP的限制)。在发送 cookie 时,cookie 的值会自动进行 URL 编码,在取回时进行自动解码(为防止 URL 编码,请使用 setrawcookie。

setrawcookie('cookie_name', rawurlencode+606024*365);

cooke有四个标识符:cookie的name,domain,path,secure标记。要想在将来改变这个cookie的值,需要发送另一个具有相同cookie name,domain,path的Set-Cookie消息头,这将以一个新

因为Cookie是通过HTTP标头进行设置的,所以也可以直接使用header方法进行设置。

的值来覆盖原来cookie的值。然而,如果仅仅只是改变这些选项的某一个也会创建一个完全不同的cookie,如只是更改了name值。

header("Set-Cookie:cookie_name=value");

cookie失效时间:

删除cookie

可以设置过期时间,如果不设置则是会话级别的,即关闭浏览器就会消失。当cookie创建时包含了失效日期,这个失效日期则关联了以name-domain-path-secure为标识的cookie。要改变一个cookie的失效日期,你必须指定同样的组合。当改变一个cookie的值时,你不必每次都设置失效日期,因为它不是cookie标识信息的组成部分。例如:

PHP设置Cookie最常用的方法就是使用setcookie函数,setcookie具有7个可选参数,我们常用到的为前5个:

复制代码 代码如下:setcookie+3600*24);setcookie;

name可以通过$_COOKIE['name'] 进行访问 value expireUnix时间戳格式,默认为0,表示浏览器关闭即失效 path如果路径设置为'/',则整个网站都有效 domain默认整个域名都有效,如果设置了'www.imooc.com',则只在www子域中有效

在cookie上的失效日期并没有改变,因为cookie的标识符是相同的。实际上,只有你手工的改变cookie的失效日期,否则其失效日期不会改变。这意味着在同一个会话中,一个会话cookie可以变成一个持久化cookie,反之则不可。为了要将一个持久化cookie变为一个会话cookie,你必须删除这个持久化cookie,这只要设置它的失效日期为过去某个时间之后再创建一个同名的会话cookie就可以实现。

$value = 'test';setcookie;setcookie("TestCookie", $value, time; //有效期一小时setcookie("TestCookie", $value, time()+3600, "/path/", "imooc.com"); //设置路径与域

需要记得的是失效日期是以浏览器运行的电脑上的系统时间为基准进行核实的。没有任何办法来来验证这个系统时间是否和服务器的时间同步,所以当服务器时间和浏览器所处系统时间存在差异时这样的设置会出现错误。

PHP中还有一个设置Cookie的函数setrawcookie,setrawcookie跟setcookie基本一样,唯一的不同就是value值不会自动的进行urlencode,因此在需要的时候要手动的进行urlencode。

cookie自动删除:

setrawcookie('cookie_name', rawurlencode+606024*365);

cookie会被浏览器自动删除,通常存在以下几种原因:会话cooke在会话结束时会被删除持久化cookie在到达失效日期时会被删除,如:复制代码 代码如下:setcookie-3600);如果浏览器中的cookie限制到达,那么cookies会被删除以为新建cookies创建空间。

手机美高梅游戏网址,因为Cookie是通过HTTP标头进行设置的,所以也可以直接使用header方法进行设置。

关于session的维护与生命周期

header("Set-Cookie:cookie_name=value");

Session是由应用服务器维持的一个服务器端的存储空间,用户在连接服务器时,会由服务器创建生成一个唯一的sessionID,用该sessionID为标识符来存取服务器端的Session存储空间,在会话期间,分配给客户端的唯一sessionID,用来标识当前用户,与其他用户进行区分。通过SessionID接受每一次访问的请求,从而识别当前用户,跟踪和保持用户的具体资料,以及session变量,可在session中存储数字或文字资料.比如session_美高梅手机游戏网站,name.这些信息都保存在服务器端。当然,sessionID也可以作为会话信息保存到数据库中,进行session持久化。这样可以跟踪用户的登陆次数、在线与否、在线时间等从而维护HTTP无状态事物之间的关系。session的内容存储是键值对的列表,键是字符串类型,session的存储更方便,值可以是对象。

简述session

在session会话期间,session会分别保存在客户端和服务器端两个文件,客户端可以是cookie方式保存的sessionID或通过url字符串形式传递。服务器端一般以文本的形式保存在指定的session目录中。在服务器端我们可以通过session.use_cookies来控制客户端使用哪一种保存方式。如果定义为cookie保存方式,我们可以通过session.cookie_lifetime来控制被保存在client上的cookie的有效期。而如果客户端用cookie方式保存的sessionID,则使用“临时”的cookie保存(cookie的名称为PHPSESSID,通过Firebug你可以了解到详细的信息,该名称你可以通过php.ini session.name进行更改),用户提交页面时,会将这一SessionID提交到服务器端,来存取session数据。这一过程,是不用开发人员干预的。

在PHP中使用session非常简单,先执行session_start方法开启session,然后通过全局变量$_SESSION进行session的读写。

Session的创建:

session_start();$_SESSION['test'] = time;

复制代码 代码如下:session_start() //开始一个会话及返回已经存在会话功能:初始化Session,也标识着session生命周期的开始。要使用session,必须初始化一个session环境,有点类似于OOP概念中调用构造函数构创建对象实例一样。session初始化操作,声明一个全局数组$_SESSION,映射寄存在内存的session数据。如果session文件已经存在,并且保存有session数据,session_start()则会读取session数据,填入$_SESSION中,开始一个新的session生命周期。

删除session

说明:这个函数没有参数,且返回值为true,如果使用基于cookie的sessin,那么在session_satrt()之前不能有任何的输出,包括空白如果在php.ini中session.auto_start=1开启,则在每个页面执行session_start(),不需要手工设置,该选项默认为关闭状态,开启后不能将对象放入session中。

在PHP中使用session非常简单,先执行session_start方法开启session,然后通过全局变量$_SESSION进行session的读写。

Session ID:

session_start();$_SESSION['test'] = time;

用户session唯一标识符,随机生成的一串字符串,具有唯一性,随机性。主要用于区分其它用户的session数据。用户第一次访问web页面的时候,php的session初始化函数调用会分配给当前来访用户一个唯一的ID,也称之为session_id。

session会自动的对要设置的值进行encode与decode,因此session可以支持任意数据类型,包括数据与对象等。

获得session_id():

session_start();$_SESSION['ary'] = array;$_SESSION['obj'] = new stdClass;

复制代码 代码如下:echo $_COOKIE['PHPSESSID'].'
';echo $_COOKIE[session_name()].'
';echo session_id().'
';

编辑:美高梅手机游戏网站 本文来源:不论是在使用cookie方式存储,在网站中跟踪一个

关键词: