当前位置: 首页 > 编程笔记 >

PHP Session机制简介及用法

訾渝
2023-03-14
本文向大家介绍PHP Session机制简介及用法,包括了PHP Session机制简介及用法的使用技巧和注意事项,需要的朋友参考一下

当服务器创建了一个session(session_start()),服务器将会在服务器的指定文件夹下创建一个session文件,其名称为sessionID,并当做cookie的值发送给浏览器。浏览器每次访问该服务器时便会带着这个cookie,服务器便会识别改sessionID,找到相应的session文件。该文件中存放了若干键值对。该session文件所存放的文件夹可以在配置文件php,ini中修改。

cookie 每次请求页面的时候进行验证,如果用户信息存储在数据库中,每次都要执行一次数据库查询,给数据库造成多余的负担。cookie可以被修改的,所以安全系数太低。

session是存储在服务器端面的会话,相对安全,并且不像Cookie那样有存储长度限制。由于Session是以文本文件形式存储在服务器端的,所以不怕客户端修改Session内容。实际上在服务器端的Session文件,PHP自动修改session文件的权限,只保留了系统读和写权限,而且不能通过ftp修改,所以安全得多。

对于 Cookie 来说,假设我们要验证用户是否登陆,就必须在 Cookie 中保存用户名和密码(可能是 md5 加密后字符串),并在每次请求页面的时候进行验证。

如果用户名和密码存储在数据库,每次都要执行一次数据库查询,给数据库造成多余的负担。因为我们并不能 只做一次验证。为什么呢?

因为客户端 Cookie 中的信息是有可能被修改的。假如你存储 $admin 变量来表示用户是否登陆,$admin 为 true 的时候表示登陆,为 false 的时候表示未登录,在第一次通过验证后将 $admin 等于 true 存储在 Cookie,下次就不用验证了,这样对么?错了,假如有人伪造一个值为 true 的 $admin 变量那不是就立即取的了管理权限么?非常的不安全

而 Session 就不同了,Session 是存储在服务器端的,远程用户没办法修改 Session 文件的内容,因此我们可以单纯存储一个 $admin 变量来判断是否登陆,首次验证通过后设置 $admin 值为 true,以后判断该值是否为 true,假如不是,转入登陆界面,这样就可以减少很多数据库操作了。

而且可以减少每次为了验证 Cookie 而传递密码的不安全性了(Session 验证只需要传递一次,假如你没有使用 SSL 安全协议的话)。即使密码进行了 md5 加密,也是很容易被截获的。

session 会话会为每一个开启了 session 会话的访问者建立一个唯一的会话 ID ,用于识别用户。该会话 ID 可能存储于用户电脑的 cookie 内,也可能通过 URL 来传递。而对应的具体 session 值会存储于服务器端,这也是与 cookie 的主要区别,并且安全性相对较高。

创建 session

要创建 session 或返回已经存在的会话 ,就必须先使用 session_start() 函数开启一个 session 会话,系统会分配一个会话 ID:

<?php
session_start();//此函数没有参数,且返回值均为true。最好将这个函数置于最先,而且在它之前不能有任何输出,否则会报警
?>

注册session变量

使用 session_register() 函数注册一个 session 变量,成功返回 TRUE ,否则返回 FALSE 。

语法:bool session_register( mixed name [, mixed ...] )

使用 session_register() 函数可以在目前会话下注册一个或多个全局 session 变量。 参数name就是想要加入的变量名,成功则返回逻辑值true。可以用$_SESSION[name]或$HTTP_SESSION_VARS[name]的形式来取值或赋值。

例子:

<?php
session_start();
$username = "nostop";
session_register("username");
?>

在该例子中,我们向 session 注册了一个名为 username 的变量,其值为 nostop 。

读取 session

PHP 内置的 $_SESSION 变量可以很方便的访问设置的 session 变量。

例子:

<?php
session_start();
echo "登记的用户名为:".$_SESSION["username"];  //输出 登记的用户名为:nostop
?>

销毁 session

session_unregister()  注销单个 session 变量
unset($_SESSION['age']); 用于注销以$_SESSION['age']注册的session变量
session_unset()  删除所有已注册的变量
session_destroy() 注销所有的session变量,并注销整个 session 会话

例子:

<?php
session_start();
session_unregister("username");  //注销 session 某个变量
session_unset();     //注销 session 会话
?>


检查变量是否被登记为会话变量

session_is_registered

语法:boobean session_is_registered(string name);

这个函数可检查当前的session之中是否已有指定的变量注册,参数name就是要检查的变量名。成功则返回逻辑值true。

例子:

<?php
  session_start();
  if(!session_is_registered("gender")){ //判断当前会话变量是否注册
    session_register("gender");  //注册变量
  }
  $gender="女";
  echo $_SESSION['gender']; //女
?>


存取当前会话名称

session_name

语法:boolean session_name(string [name]);

这个函数可取得或重新设置当前session的名称。若无参数name则表示获取当前session名称,加上参数则表示将session名称设为参数name。

例子:

<?php

$sessionName = session_name();  //取得当前 Session 名,默认为 PHPSESSID
$sessionID = $_GET[$sessionName];  //取得 Session ID
session_id($sessionID);   //使用 session_id() 设置获得的 Session ID
?>

存取当前会话标识号

session_id

语法:boolean session_id(string [id]);

这个函数可取得或重新设置当前存放session的标识号。若无参数id则表示只获取当前session的标识号,加上参数则表示将session的标识号设成新指定的id。

设置 Session 的生存期

setcookie:向客户端发送一个 HTTP cookie。

<?php
  session_start
  // 保存一天
  $lifeTime = 24 * 3600;
  setcookie(session_name(), session_id(), time() + $lifeTime, "/");
?>

session_set_cookie_params:设置 Session 的生存期的,该函数必须在 session_start() 函数调用之前调用。
如果客户端使用 IE 6.0 , session_set_cookie_params(); 函数设置 Cookie 会有些问题,所以我们还是手动调用 setcookie 函数来创建 cookie。

// 保存一天

<?php
  $lifeTime = 24 * 3600;
  session_set_cookie_params($lifeTime);
  session_start();
  $_session["admin"] = true;
?>

设置 Session 文件的保存路径

session_save_path() :必须在 session_start() 函数调用之前调用。

<?php
  // 设置一个存放目录
  $savePath = "./session_save_dir/";
  // 保存一天
  $lifeTime = 24 * 3600;
  session_save_path($savePath);
  session_set_cookie_params($lifeTime);
  session_start();
  $_session["admin"] = true;
?>
<?php
session_start();  //启动Session
$username='nostop';
session_register('username');  //注册一个名为username变量
echo '登记的用户:'.$_SESSION['username'];  //登记的用户:nostop  读取Session变量

$_SESSION['age']=23;  //声明一个名为age的变量,并赋值
echo '年龄:'.$_SESSION['age']; //年龄:23

session_unregister('username'); //注销Session变量
echo $_SESSION['username']; //空
echo $_SESSION['age'];//23

unset($_SESSION['age']); //注销Session变量
echo '登记的用户:'.$_SESSION['username']; //空
echo '年龄:'.$_SESSION['age']; //空
?>
 类似资料:
  • 爱客服简介 爱客服智能客服系统是由中科汇联科技股份有限公司自主研发,专门为中小企业量身定制的全智能、全渠道的云客服平台(以下简称爱客服)。 爱客服以清华、北大、哈工大,三大高校组成的中科汇联人工智能研究院为技术核心;具备精准的语义理解、自然的人机交互、智能的知识梳理等优势;采用机器人+人工坐席+工单+呼叫中心四位一体的服务模式,有效提升客服工作效率、降低管理成本,让企业的价值真正传递给每一位客户。

  • 一、Flume简介 Apache Flume 是一个分布式,高可用的数据收集系统。它可以从不同的数据源收集数据,经过聚合后发送到存储系统中,通常用于日志数据的收集。Flume 分为 NG 和 OG (1.0 之前) 两个版本,NG 在 OG 的基础上进行了完全的重构,是目前使用最为广泛的版本。下面的介绍均以 NG 为基础。 二、Flume架构和基本概念 下图为 Flume 的基本架构图: 2.1

  • 本文向大家介绍Angular ElementRef简介及其使用,包括了Angular ElementRef简介及其使用的使用技巧和注意事项,需要的朋友参考一下 Angular 的口号是 - “一套框架,多种平台。同时适用手机与桌面 (One framework.Mobile & desktop.)”,即 Angular 是支持开发跨平台的应用,比如:Web 应用、移动 Web 应用、原生移动应用和

  • 使用指南 - 数据报告 - 访问分析 - 子目录使用及简介 您可将一系列有相同特征的页面设置为子目录,助您了解网站各个子目录的综合地位以及每个子目录的详细数据信息,从而科学分配资源。 子目录适合某些特定条件下使用,比如: 1. 网站结构复杂,页面非常多。 2. 网站本身有频道划分,每个频道都针对不同产品、服务或内容。 3. 希望针对网站中的某些页面单独分析数据。 在以上情况下,您可以设置子目录。设

  • 想象我们身处一个150年前的美国小镇。大家都互相认识。 商店新进了一批布料,店员注意到几块印有特殊花纹的布料肯定会受到克兰西女士的喜爱,因为他知道这位女士喜欢同类型的布料,并暗自记下如果克兰西女士下次到访,要将这块布料推荐给她。 温克勒周向酒吧老板威尔逊先生提到,他正考虑要将自己的雷明顿来福枪转售。威尔逊先生将这个消息告诉了巴德巴克莱,他正想购买一把高品质的来福枪。 瓦尔克兹警官和他的下属们知道李

  • 本文向大家介绍WebSocket的简单介绍及应用,包括了WebSocket的简单介绍及应用的使用技巧和注意事项,需要的朋友参考一下 定时刷新的不足与改进 web开发中可能遇到这样的场景:网页里的某一块区域里写了一些内容,但这些内容不是固定的,即使看网页的人没有做任何操作,它们也会随时间不断变化。股票行情、活动或游戏的榜单都是比较常见的例子。 对此,一般的做法是用setTimeout()或setIn