使用$_SESSION设置和读取Session (PHP)

news/2024/10/16 19:27:23/

Session的中文是会话的意思,在Web编程中Session代表服务器与客户端之间的“会话”,意思是服务器与客户端在不断的交流。
在PHP中,使用$_SESSION[]可以存储特定用户的Session信息。并且每个用户的Session信息都是不同的。
当用户请求网站中任意一个页面时,若用户未建立Session对象,则服务器会自动为用户创建一个Session对象,它包含唯一的SessionID和其他Session变量,并保存在服务器内存中,不同用户的Session对象存着各自指定的信息。

Session信息的存储与读取

session_start(); //开启Session功能
session_id();//获取用户Session ID值,如需修改在括号中传值即可

利用Session变量存储信息:
$_SESSION["Session名称"]=变量或字符串信息;

读取Session变量信息(可赋值给一个变量或者直接输出):
变量=$_SESSION["Session名称"];

说明:
(1)使用Session前都需要在页面开头用session_start()方法开启Session功能。
(2)session_start()函数前不能有任何代码输出到浏览器,最好加在页面头部,或者先用ob_start()函数打开输出缓冲区。
(3)对于一个不存在的Session变量赋值,将自动创建该变量;给一个已经存在的Session变量赋值,将修改其中的值。
(4)如果新打开一个浏览器,则无法获取之前保存的Session信息。因为新打开一个浏览器相当于一个新的用户在访问。
(5)只要创建了Session变量,该Session变量就能被网站中所有页面访问。
(6)最好不要把大量的信息存入Session变量中,或者创建很大Session变量。如果Session变量保存的信息太多,同时访问网站的用户又很多会非常占用服务器资源。

演示代码:

//test1.php
<?phpsession_start();$_SESSION['name']="admin";$_SESSION['password']=123456;echo "所在文件:".$_SERVER["PHP_SELF"]."<br/>";echo "用户名:{$_SESSION['name']} <br/>密码:{$_SESSION['password']}";
?>
//test2.php
<?phpsession_start();echo "所在文件:".$_SERVER["PHP_SELF"]."<br/>";echo "用户名:{$_SESSION['name']} <br/>密码:{$_SESSION['password']}";
?>

运行截图

Session的生命期

Session对象的生命期指的是从用户在Session有效期内第一次访问网站直到不再访问网站为止的这段时间。

设置Session有效期:
ini_set('session_save_path','/tmp/');//设置保存路径
ini_set('session.gc_maxlifetime',60);//保存1分钟
setcookie(session_name(),session_id(),time()+6,"/");//设置会话cookie的过期时间
 
说明:
(1)关闭浏览器不会使一个Session结束,但会使这个Session永远无法访问。因为当用户打开新的浏览器窗口又会产生一个新的Session。
(2)Session对象不是一直有效,默认有效期为24分钟。
(3)增加Session的有效期会导致Web服务器保存用户Session的信息的时间增长,如果访问的用户很多,会加重服务器负担。
(4)不能单独对某个用户的Session设置有效期。

删除和销毁Session
删除Session常用来实现用户注销的功能,使得用户能够安全退出网站。
 
session_unset();//删除$_SESSION中所有session变量
session_destroy();//清除Session ID

说明:
(1)session_unset函数只能删除$_SESSION[]中的所有元素,不能删除对应的Session ID,也不能删除保存Session ID的文件。
(2)session_destroy函数只能删除Session ID,并销毁Session文件,但是不能删除$_SESSION[]中的所有元素。
(3)unset()方法也可以删除单个Session变量。

利用Session限制未登入用户访问(演示代码)

//login.php
<html><head><title>登入</title></head><body><?phpsession_start();if(!isset($_POST["login"])){echo '<form action="#" method="post"><p>帐号:<input type="text" name="name"/></p><p>密码:<input type="password" name="pw"/></p><p><input type="submit" name="login" value="登入"/></form> ';}else{$name=$_POST["name"];$pw=$_POST["pw"];if($name=="admin"&&$pw==123456){$_SESSION["name"]=$name;$_SESSION["pw"]=$pw;echo '登入成功,<a href="test.php">查看个人信息</a>';}else{echo '帐号或密码错误!<a href="JavaScript:history.back()">返回登入</a>';}}?></body>
</html>//test.php
<?phpsession_start();if(isset($_SESSION['name'])){echo "帐户信息:<br/>";echo "用户名:".$_SESSION["name"]."<br/>";echo "密码:".$_SESSION["pw"]."<br/>";echo '<a href="logout.php?action=logout">注销</a>';}else{echo '未登入用户不允许访问,<a href="login.php">请登入</a>';}
?>//logout.php
<?phpif($_GET['action']=="logout"){header('Refresh:3; url="login.php"');session_start();setcookie("cookiename", NULL);session_unset();session_destroy();echo "三秒后返回登入页面";}
?>

运行截图


http://www.ppmy.cn/news/412453.html

相关文章

Redis端口为什么是6379?

先介绍下redis的作者Salvatore Sanfilippo(Antirez)&#xff0c;意大利人&#xff0c;就是下图这位。 Antirez现在已经40多岁了&#xff0c;依然奋斗在代码一线&#xff0c;为开源社区做贡献。Antirez出生在非英语系国家&#xff0c;所以英语一直是他的短板。他曾经写过一篇博文…

php crontab 用户,如何以用户www-data的身份运行crontab?

问题描述 我的LAMP被设置为user:www-data&#xff0c;并且所有文件和文件夹都具有该权限。 我已经将crontab设置为user ubuntu。 所以我做crontab -e并使用此命令&#xff1a; */5 * * * * php /var/www/public/voto_m/artisan top >/dev/null 2>&1 基本上&#xff…

RGBT 对比算法 实验设置

2021-TIP-MIDDbackbone is VGG16(效果好) and ResNet50 VT821-VT1000-VT5000训练集:VT5000-TR的训练集2500做训练集 测试集:VT5000-TE,VT821,VT1000 MTMR(RGBT)(t传统方法) M3S-NIR(RGBT)(t) SGDL(RGBT)(t) ADF(RGBT) MIDD(RGBT) DMRA(RGBD) S2MA(RGBD) PFA(RGB-早期融合) R3Ne…

CTF-数据分析(七)

声明&#xff1a;以下CTF题均来自网上收集&#xff0c;在这里主要是给新手们涨涨见识&#xff0c;仅供参考而已。需要题目数据包的请私信或在下方留言。 13.数据包分析- SSL Sniff &#xff08;来源&#xff1a;hack-dat-kiwi-ctf-2015&#xff09; 1.关卡描述 我们收到了MIT…

Emoji.voto,Linkerd 服务网格(service mesh)的示例应用程序

一个微服务应用程序&#xff0c;允许用户为他们最喜欢的表情符号(emoji)投票&#xff0c;并跟踪排行榜上收到的投票。愿最好的 emoji 获胜。 该应用程序由以下 3 个服务组成&#xff1a; emojivoto-web&#xff1a;Web 前端和 REST APIemojivoto-emoji-svc&#xff1a;用于查找…

VOTO X2(16GB) root教程_方法

VOTO X2&#xff08;16GB&#xff09;的root教程在这里整理了一下&#xff0c;之前有机友说自己的手机想删除系统自带的一些无用软件&#xff0c;可是怎么也删除不了&#xff0c;所以需要先进行root才可以删除&#xff0c;不然的话是删除不了的&#xff0c;这个方法也是大家在r…

维修mats显存测试_显存检测软件Mats

显存检测软件Mats是一款非常简单好用的电脑系统硬件检测工具&#xff0c;它的主要作用是帮助用户进行非常快速的显卡显存相关的信息的收录抓取&#xff0c;让用户可以快速了解硬件配置信息&#xff0c;更好地掌握个人电脑&#xff01; 应用简介&#xff1a; 显存检测软件Mats只…

GPU显存爆炸如何解决?

问题&#xff1a;在使用GPU训练网络时&#xff0c;出现RuntimeError: CUDA out of memory. Tried to allocate 20.00 MiB (GPU 0; 11.17 GiB total capacity; 134.77 MiB already allocated; 8.56 MiB free; 3.23 MiB cached)&#xff0c;自己明明11G的显存&#xff0c;为啥还给…