【前言】
? ?本文主要总结下PHP里Session相关知识? ?
?
【概论】
? ?使用PHP应用session时,将session中的数据存储在服务器上,然后通过客户端传来的sessionID识别客户端的信息,并提取信息。
? ?php中的session的常用操作:session的写入、读取、注册与删除。
(1)session的初始化
? ?标记session使用开始的函数是session_start,session_start函数用于初始化session变量。语法如下:
class="语法">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 '对不起,会话中没有数据 或者 不存在该对话 !'; } ?>
?
?
?
?
?
.