PHP Session总结

【前言】

   本文主要总结下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 '对不起,会话中没有数据  或者  不存在该对话 !';
}
?>

 

 

 

 

 

.

猜你喜欢

转载自570109268.iteye.com/blog/2412944