【前言】
本文主要总结下PHP里Session相关知识
【概论】
使用PHP应用session时,将session中的数据存储在服务器上,然后通过客户端传来的sessionID识别客户端的信息,并提取信息。
php中的session的常用操作:session的写入、读取、注册与删除。
(1)session的初始化
标记session使用开始的函数是session_start,session_start函数用于初始化session变量。语法如下:
session_start();
返回值为true
(2)session的写入和读取
在PHP中,session的使用是通过超全局变量$_SESSION的调用和读取来完成
【列表】
(1)简介;(2)由来;(3)工作机制;(4)开启会话;
(5)存储和获取;(6)存储获取Session案例;(7)删除 / 释放Session
【详解】
(1)简介
session变量用于存储有关用户会话的信息,或更改用户会话的设置。Session变量保存的信息是单一用户的,并且可供应用程序中的所有页面使用
(2)由来
当运行一个应用程序时,你会打开它,做些更改,然后关闭它。这很像一次会话。计算机清楚你是谁。它知道你何时启动应用程序,并在何时终止。但是在因特网上,存在一个问题:服务器不知道你是谁以及你做什么,这是由于 HTTP 地址不能维持状态。
通过在服务器上存储用户信息以便随后使用,PHP session 解决了这个问题(比如用户名称、购买商品等)。不过,会话信息是临时的,在用户离开网站后将被删除。如果需要永久储存信息,可以把数据存储在数据库中
(3)工作机制
为每个访问者创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,亦或通过URL进行传导
(4)开启会话
在把用户信息存储到session中之前,首先必须启动会话。启动会话session_start() 函数必须位于 <html> 标签之前:
<?php session_start(); ?> <html> <body>...</body> </html>
上面的代码会向服务器注册用户的会话,以便开始保存用户信息,同时会为用户会话分配一个UID
(5)存储和获取
用$_SESSION超全局变量可以存储和获取session变量
<?php session_start(); $_SESSION['views']=1;// 存储Session ?> <html> <body> <?php echo "Pageviews=". $_SESSION['views'];//获取Session ?> </body> </html>
注意:在其他页面获取前,首先要启动会话session-start();
(6)存储获取Session案例
下面创建一个简单的页面计数器案例
isset() 函数检测是否已设置 "views" 变量,如果已设置 "views" 变量,便累加计数器。如果 "views" 不存在,则创建 "views" 变量,并把它设置为 1:
<?php session_start(); if(isset($_SESSION['views'])){ $_SESSION['views']=$_SESSION['views']+1; }else{ $_SESSION['views']=1; echo "Views=". $_SESSION['views']; } ?>
(7)删除 / 释放Session
如果想删除某些session数据,可以使用unset()或session_destroy()函数
unset() 函数用于释放指定的 session 变量:
<?php unset($_SESSION['views']); ?>
也可以通过 session_destroy() 函数彻底终结 session:
<?php session_destroy(); ?>
区别:
①unset() 函数用于释放指定的 session 变量
②session_destroy()将重置session,失去所有已存储的 session 数据
针对这个区别,我做了一个案例
<?php session_start(); ?> </head> if(isset($_SESSION['views'])) $_SESSION['views']=$_SESSION['views']+1; else $_SESSION['views']=1; echo "数量=". $_SESSION['views']."<br>"; ?> <?php $_SESSION['name'] = 'Tony'; echo "名字是=". $_SESSION['name']."<br>"; ?> <a href="./demo.php">页面2</a>
<?php session_start(); ?> <a href="./index.php">链接</a><br> <?php echo "数量=". $_SESSION['views']."<br>"; echo "名字是=". $_SESSION['name']; ?> <?php //unset($_SESSION['views']); //unset($_SESSION['name']); session_destroy(); ?>
【案例】
(1)注册页面:
在网站的页面中,在注册页面对$_SESSION数组进行赋值,在其他的页面中对$_SESSION数组进行读取
注册页面中的session,例如:
<?php session_start(); $_SESSION['Name']= "Tony"; ?>
其他页面中的session,例如:
<?php session_start(); echo $_SESSION['Name']; ?>
依次运行,结果是:Tony
(2)投票
<?php if(isset($_POST['submit'])){ session_start(); //开始建立一个会话 $_SESSION['season'] = $_POST['season']; //存储会话数据 header("Location: demo2.php"); //应特别注意header()里的格式问题 } ?> <b>存储会话</b> <hr/> 选择需要设置的数据: <form name="form1" method="post" action="" id="form1" > <select name="season" id="season_select" > <option value="">无数据</option> <option value="春天">春天</option> <option value="夏天">夏天</option> <option value="秋天">秋天</option> <option value="冬天">冬天</option> </select> <br/> <br/> <br/> <input type="submit" name="submit" value="submit"/> </form>
<?php session_start(); //建立或者继续一个会话 $season = $_SESSION['season']; //读取会话数据 echo "<b>读取会话</b><br/><br/>"; switch ($season) { case '春天'; echo '现在是绿意盎然的春天!'; break; case '夏天'; echo '现在是热情四溢的夏天!'; break; case '秋天'; echo '现在是丰收果实的秋天!'; break; case '冬天'; echo '现在是白雪皑皑的冬天!'; break; default ; echo '对不起,会话中没有数据 或者 不存在该对话 !'; } ?>
.