分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

PHP会话管理和控制

发布时间:2023-09-06 02:09责任编辑:郭大石关键词:PHP

session概述

我们知道Cookie是通过将数据保存在客户端来实现与服务端保持连接的,而session是通过将数据保存在服务器端来实现保持连接的

我们之前拿开会的例子讲了一个小例子:

在几十年前人们开会的时候,都需要带上一个参会证。这个参会证上有这个人的职务、姓名、单位、照片等信息。在开会的时候,会议安保人员、组织者只需要检查相关信息就行了。

这个小例子主要说明一点,人们自己带着自己的参会证,带着自己的信息。这种模式就是cookie。

而电脑将这段cookie信息存在了电脑的硬盘里。

Cookie存在哪儿? Cookie的本质是一小段数据,一小段存储在你电脑硬盘中的数据。可是它存在哪里呢?来,我们找一下。

Chrome浏览器的Cookie文件的存放路径是:
C:\Users\你的用户名\AppData\Local\Google\Chrome\User Data\Default\Cookies

Firefox浏览器的Cookies文件存放路径是:
C:\Users\你的用户名\AppData\Roaming\Mozilla\Firefox\Profiles\rdgp36vl.default\cookies.sqlite 每个人可能略有不同

用文本编辑器直接打开Cookies文件看到的是乱码,我们得用工具查看,如下图:

 我们来看一下需要关注的几个列,Domain代表的是cookies所属的网站,Name代表的是这个Cookie的名字,Value代表的是Cookie的值,Expires代表的是这个Cookie的有效期。

用一个我们熟悉的网站举例,tudou.com,图上我们可以看到有4个关于 tudou.com 的Cookie,那么当我们访问 tudou.com的时候,浏览器会自动把这4个Cookie的 Name 和 Value 发送到 tudou.com 这个网址所指向的服务器(PS:必须在有效期内,超出有效期的话是不会被发送到服务器的,有效期我们可以依据需求来定),如此一来,服务器就可以根据这些信息来保持与客户端的连接了,通俗点,就是可以通过这些数据来知道你就是你。当服务器收到这些Cookies后,会根据他们的值来做一些处理,做什么处理?这就取决于开发人员想根据这些信息来干嘛了!

PHP会话控制之PHP中的Cookie

这节我们通过一个用户首次登陆网站后,再次访问不需要重复输入用户名和密码的例子来学习Cookie。

首先介绍一下php中设置cookie的方法。
php中提供了一个函数来让我们设置cookie,这个函数是:

bool setcookie ?( ???????string $名字 ???????[, string $值] ???????[, int $过期时间 ?= 0] ???????[, string $路径] ???????[, string $域名] ???????[, bool $安全 ?= false] ???????[, bool $http只读 ?= false] ???);

参数 描述
$名字 必需。规定 cookie 的名称。
$值 可选。规定 cookie 的值。
$有效期 可选。规定 cookie 的有效期。
$路径 可选。规定 cookie 的服务器路径。
$域名 可选。规定 cookie 的域名。
$安全 可选。规定是否通过安全的 HTTPS 连接来传输 cookie。
$http安读 可选。如果true,那么js就无法读取改cookie,增加安全性。

一般来说,我们其实用不到上面那么多参数,对于这个函数,我们一般这么用: setcookie(cookie名,cookie值,cookie有效期);

没错,就那么3个。如此一来,我们就可以在服务端通过$_COOKIE[‘name‘] 来读取cookie了。

以下是示例:
我们将文件名命名为:cookie.php。

我们来模拟我们在互联网上见到最常见的例子:输入用户名和密码,登陆成功的过程。

我们来建一个数据库login,其中有表user,有username和password这两个字段。

<?php//第一次登陆的时候,通过用户输入的信息来确认用户if ( ( $_POST[‘username‘] != null ) && ( $_POST[‘password‘] != null ) ) { ???$userName = $_POST[‘username‘]; ???$password = $_POST[‘password‘]; ???//从db获取用户信息 ???//PS:数据库连接信息改成自己的 分别为主机 数据库用户名 密码 ???$conn = mysqli_connect(‘localhost‘,‘root‘,‘root‘); ???mysqli_select_db($conn,‘test‘); ???$sql = "select * from user where `username` = ‘$userName‘ "; ???$res = mysqli_query($conn,$sql); ???$row = mysqli_fetch_assoc($res); ???if ($row[‘password‘] == $password) { ???????//密码验证通过,设置cookies,把用户名和密码保存在客户端 ???????setcookie(‘username‘,$userName,time()+60*60*24*30);//设置时效一个月,一个月后这个cookie失效 ???????setcookie(‘password‘,$password,time()+60*60*24*30); ???????//最后跳转到登录后的欢迎页面 ???????header(‘Location: welcome.php‘ . "?username=$userName"); ???}}//再次访问的时候通过cookie来识别用户if ( ($_COOKIE[‘username‘] != null) ?&& ($_COOKIE[‘password‘] != null) ) { ???$userName = $_COOKIE[‘username‘]; ???$password = $_COOKIE[‘password‘]; ???//从db获取用户信息 ???//PS:数据库连接信息改成自己的 分别为主机 数据库用户名 密码 ???$conn = mysqli_connect(‘localhost‘,‘root‘,‘root‘,‘test‘); ???$res = mysqli_query($conn,"select * from user where `username` = ?‘$userName‘ "); ???$row = mysqli_fetch_assoc($res); ???if ($row[‘password‘] == $password) { ???????//验证通过后跳转到登录后的欢迎页面 ???????header(‘Location: welcome.php‘ . "?username=$userName"); ???}}?><html><head></head><body><form action="" method="POST"> ???<div> ???????用户名:<input type="text" name="username" /> ???????密 ?码:<input type="text" name="password" /> ???????<input type="submit" value="登录"> ???</div></form></body></html>

跳转到的welcome.php代码

<?php$user = $_GET[‘username‘];?><html><head></head><body> ??welcome,<?php echo $user;?></body></html>

这样,当我第一次访问cookie.php的时候,我需要输入用户名和密码,输入完毕后跳转到了welcome.php。然后我关闭浏览器,再次打开cookie.php,这次没有要求我输入用户信息,而是直接跳转到了welcome.php,因为之前我们存的cookie信息被浏览器自动发送到了服务端,服务端做完处理直接跳转到了welcome.php,服务器认识我们了!知道我是之前那个登陆过的用户,这样我们就通过cookie技术让无状态的HTTP协议保持了状态。
照着这个做一遍,我相信你会用cookie了。

只不过!!!只不过!!!只不过!!!重要的事要说3遍,我们一般是不会把用户名和密码放到cookie中的,因为这并不安全,容易泄露自己的信息,请不要把重要的信息放到cookie中。我们这个只是一个学习cookie的例子。

PHP会话控制之PHP中使用session

1.开启session
首先我们要开启session,那么第一个要学习的函数就是
bool session_start()了,这个函数没有参数。在php文件的开始使用

   session_start();

就可以启用新会话或者重用现有会话了。

2.添加session数据
开启会话之后,那么在接下来的处理中,我们就可以使用$_SESSION变量来存取信息了。我们要知道的是$_SESSION变量是个数组。当我们要把信息存入session的时候应该这么写:

   $_SESSION[‘userName‘] = ‘wang‘;

3.读取session数据
读取很简单,就像我们使用数组一样,如下:

   $userName = $_SESSION[‘userName‘];

当然也可以 $_SESSION[‘userName‘] 来用。和数组一样的使用。
4.销毁session数据
我们可以使用很多种方式来销毁session数据。
a) unset函数
我们通过使用类似

   unset($_SESSION[‘XXX‘]);

来销毁session中的 XXX 变量。PS:请不要!请不要!请不要unset($_SESSION),会导致后续无法使用$_SESSION这个变量!!!
b) 空数组赋值给session变量

   $_SESSION = array();

之前我们说过$_SESSOIN变量是个数组,那么空数组赋值的话也是相当于将当前会话的$_SESSION变量中的值销毁。
c) session_destory() 函数
这个函数会销毁当前会话中的全部数据,并结束当前会话。但是不会重置当前会话所关联的全局变量, 也不会重置会话 cookie。

5.session的扩展:默认session存储在哪里。
在php.ini配置文件中有这么一行 session.save_handler = files, 
files,说明了php默认的是用文件读写的方式来保存session的。那么在哪个目录呢?继续看。session.save_path = "/tmp",
这一行前面有个 ; ,说明是被注释的,不过即便这样,php默认的
session 也是保存在这里的,/tmp目录。

 我的写入session的语句是:

$_SESSION[‘as‘] = ‘as‘;

解读一下,第一个as代表的是$_SESSION[‘as‘]中的as,|后面的s表示的是这是一个字符串类型的数据,2表示的是这个字符串所占的字节数,最后双引号引起来的是值as。

PHP会话管理和控制

原文地址:https://www.cnblogs.com/LLMjiayou7/p/9462599.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved