php使用Cookie实现和用户会话的方法
《:php使用Cookie实现和用户会话的方法》要点: PHP教程本篇章节讲解php使用Cookie实现和用户会话的办法.分享给大家供大家参考.具体分析如下: PHP教程PHP 包含了很多的函数,可以用来管理和记录用户信息,包括简单的 cookie 和全方位的用户会话.会话使用 PHP 语言内建的技术,使得保存状态就像是引用超全局变量那样简单. PHP教程1.Cookie 简介 PHP教程我们可以和 PHP 脚本一起使用 cookie 来存储一些关于用户的较小的信息. Cookie 是由用户浏览器存储的少量数据,它和一个来自服务器或脚本的哀求一致.通过一个用户的浏览器,一个单个的主机可以哀求保存 20 个 cookie .每个 cookie 包含一个名字、值和过期日期,以及主机和路径信息.一个单个的 cookie 的大小限制是 4KB . PHP教程在设置了 cookie 之后,只有发出哀求的主机能够读取数据,这就保证了用户隐私得到尊重.另外,用户可以配置自己的浏览器通过他接受或是拒绝所有 cookie 的哀求.因此,cookie 应该适度地使用,并且在没有设计实现警告用户的一个环境中,不应该作为一个基本元素而依赖. PHP教程如果 Web 浏览器配置为存储 cookie,它将保持基于 cookie 的信息直到过期日期.如果用户使用浏览器浏览符合 cookie 的路径和域的任何页面,它将会把 cookie 重新发送给服务器.随后,一个 PHP 脚本能够拜访 cookie,cookie 在环境变量 HTTP_COOKIE 中或者作为 $COOKIE 超全局变量的一部分,我们可以用 3 种方式来拜访它们:
代码如下:
echo $_SERVER["HTTP_COOKIE"];
echo getenv("HTTP_COOKIE"); echo $_COOKIE["vegetable"]; PHP教程2.使用 PHP 设置一个 cookie PHP教程我们可以用两种办法在一个 PHP 脚本中设置一个 cookie .首先,用 header() 函数来设置 SetCookie 标头. Header() 函数需要一个字符串,该字符串随后将包含到服务器响应的标头部分.由于标头会为你自动发送,header() 必须在发送给浏览器的热河输出之前调用.
代码如下:
head("Set Cookie:vegetable=artichoke; expires=Tue,07-Mar-06 14:39:58 GMT;path=/;domain=yourmain.com");
尽管没什么困难,这种设置 cookie 的方法还是需要我们编写一个函数来构建标头字符串.像这个例子那样格式化日期并对名 / 值对进行 URL 编码并不是特别艰难的任务,但它还是一项重复性的工作,因为 PHP 提供了一个函数来做到这些,这就是 setcookie() . PHP教程Setcookie() 函数所做的事情就像它的名字所显示的那样,它输出一个 Set-Cookie 标头.因此,它应该在任何其他内容发送给浏览器之前调用.这个函数接受 cookie 名字、 cookie 值、 UNIX 时间戳格式的过期日期、路径、域,以及一个整数,如果 cookie 仅通过一个平安的连接发送的话,这个整数的值设置为 1. 除了第一个参数以外,这个函数的所有参数都是可选的.
代码如下:
<?php
setcookie ( "vegetable","artichoke",time ()+3600,"/",".yourdomain.com",0); ? if ( isset ( $_COOKIE [ "vegetable" ])){ ??? echo "<p>Hello again,you have chosen: " . $_COOKIE [ "vegetable" ]. ".</p>" ; } else { ??? echo "<p>Hello you. This may be your first visit.</p>" ; } ?> 即便我们在脚本第一次运行的时候设置 cookie,$_COOKIE["vegetable"] 变量也不会在这时候创建.由于只有当浏览器将一个 cookie 发送到服务器的时候,才会读取它,因此,直到用户重新访问这个域内的一个页面的时候,我们才能够读取它. 正式地讲,要删除一个 cookie,只需要调用带有 cookie 名字参数的 setcookies(): setcookie("vegetable"); 然而,这种方法并不总是奏效,并且不能依赖这种方法.相反,使用一个确定已经过期的时间来设置 cookie,这种方法是最平安的: Setcookie("vegetable","",time()-60,"yourdomain.com",0); 还要确保传递给 setcookie() 与最初设置 cookie 时候所使用的是相同的路径、域和平安参数. PHP教程3.会话函数概览 PHP教程当一个访客拜访一个支持会话的页面,要么分配一个新的标识符,要么这个用户和之前的拜访已经建立的一个标识符重新关联.任何已经和会话相关联的变量,都通过 $_SESSION 超全局变量可供你的代码使用. PHP教程4.开始一个会话
代码如下:
<?php
session_start (); echo "<p>Your session ID is " . session_id (). "</p>" ; ?> 5.使用会话变量 PHP教程在每一个 PHP 文档中拜访一个唯一的会话标识符只是会话功能的开始.当一个会话启动后,我们可以在超全局变量 $_SESSION 中存储任意多个变量,然后在任何支持会话的页面上拜访它们. PHP教程下面程序向超全局变量 $_SESSION 添加了两个变量:
代码如下:
<?php
session_start (); $_SESSION [ "product1" ] = "Sonic Screwdriver" ; $_SESSION [ "product2" ] = "HAL 2000" ; echo "The products have been registered." ; ?> 在用户移动到一个新的页面之前,上面程序的神奇之处不会体现出来.下面的程序创建了一个单独的 PHP 脚本,这个脚本拜访存储在超全局变量 $_SESSION 中的变量.
代码如下:
<?php
session_start (); echo "Your chosen products are:" ; echo "<ul>" ; echo "<li>" . $_SESSION [ "product1" ]. "</li>" ; echo "<li>" . $_SESSION [ "product2" ]. "</li>" ; echo "</ul>" ; ?> 下列程序清单创建一个表单,它允许一个用户来选择多个产品.我们可以使用会话变量来创建一个基本的购物车. arraysession.php:
代码如下:
<?php
session_start (); ?> <html> <head> <title> Storing an array with a session </title> </head> <body> <h1> Product Choice Page </h1> <?php if ( isset ( $_POST [ "form_products" ])){ ??? if (! empty ( $_SESSION [ "products" ])){ ?????? $products = array_unique ( ?????? array_merge ( unserialize ( $_SESSION [ "products" ]), ?????? $_POST [ "form_produces" ])); ??? } ??? else ??? { ?????? $_SESSION [ "products" ] = serialize ( $_POST [ "form_products" ]); ??? } ??? echo "<p>Your products have been registered!</p>" ; } ?> <form method = "POST" action = " <?php echo $_SERVER [ "PHP_SELF" ]; ?> " > <p><strong> Select some products: </strong><br> <select name = "form_product[]" multiple = "multiple" size = "3" > <option value = "Sonic Screwdriver" > Sonic Screwdriver </option> <option value = "Hal 2000" > Hal 2000 </option> <option value = "Tardis" > Tardis </option> <option value = "ORAC" > ORAC </option> <option value = "Transporter bracelet" > Transporter bracelet </option> </select> <p><input type = "submit" value = "choose" /></p> </form> <p><a href = "session1.php" > go to content page </a></p> </body> </html> ? session1.php:
代码如下:
<?php
/* ? * Created on 2011-1-19 ? * ? * To change the template for this generated file go to ? * Window - Preferences - PHPeclipse - PHP - Code Templates ? */ ? session_start (); ?> <html> <head> <title> Accessing session variables </title> </head> <body> <h1> Content Page </h1> <?php if ( isset ( $_SESSION [ "products" ])){ ??? echo "<strong>Your cart:</strong><ol>" ; ??? foreach ( unserialize ( $_SESSION [ "products" ]) as $p ){ ?????? echo "<li>" . $p . "</li>" ; ??? } ??? echo "</ol>" ; } ?> <p><a href = "arraysession.php" > return to product choice page </a></p> </body> </html> 6.在查询字符串中传递会话 ID PHP教程7.销毁会话和重置变量 PHP教程8.在一个带有注册用户的环境中使用会话 PHP教程希望本文所述对大家的php程序设计有所赞助. 《:php使用Cookie实现和用户会话的方法》是否对您有启发,欢迎查看更多与《:php使用Cookie实现和用户会话的方法》相关教程,学精学透。编程之家 52php.cn为您提供精彩教程。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |