相对于PHP开发来说,它是存储在服务器端,相对安全,并且没有那样的存储长度限制。 下面是对这对的介绍。
在 PHP 中
与PHP开发相比,它是在服务器端存储的,相对安全,并且没有存储长度限制。 本文简单介绍一下它的用途。
由于是以文本文件的形式存储在服务器端,所以不怕客户端修改内容。 其实,对于服务器端的文件,PHP会自动修改文件权限,只保留系统读写权限,无法通过ftp修改,所以安全很多。
例如,如果我们要验证用户是否登录,则必须保存用户名和密码(可能是md5加密字符串),并在每次请求页面时进行验证。 如果用户名和密码存储在数据库中,则每次都要执行一次数据库查询,给数据库带来不必要的负担。 因为我们不能只做一项验证。 为什么? 因为客户端中的信息可能会被修改。 如果存储$admin变量来表示用户是否登录,当$admin为true时表示已登录,为false时表示未登录。第一次验证通过后,存储$ admin等于true,下次就不用验证了。 , 这是正确的吗? 错误的。 如果有人伪造了一个值为true的$admin变量,那是不是意味着他会立即获得管理权限? 这是非常不安全的。
但情况不同。 它存储在服务器端。 远程用户无法修改文件的内容。 因此,我们可以简单地存储一个$admin变量来判断是否登录。第一次验证通过后,将$admin值设置为true,然后判断该值是否为true。 是的话,如果不是,就进入登录界面,这样可以减少很多数据库操作。 并且可以减少每次认证时都要传递密码的不安全性(如果您没有使用SSL安全协议,则只需传递一次认证)。 即使密码经过md5加密,也很容易被截获。
当然,使用它有很多好处,比如易于控制、用户自定义存储等(存储在数据库中)。 这里我就不多说了。
需要在php.ini中设置吗? 一般不需要,因为不是每个人都有修改PHP.ini的权限。 默认存储路径为服务器的系统临时文件夹。 我们可以自定义它并将其存储在我们自己的文件夹中。 这里,我稍后再介绍一下。
如何创建 PHP
让我们从如何创建它开始。 非常简单,真的。
启动会话并创建 $admin 变量:
// 启动 session session_start(); // 声明一个名为 admin 的变量,并赋空值。 $_session["admin"] = null; ?>
如果你使用,或者PHP文件想要调用一个变量,那么你必须在调用它之前启动它,使用()函数。 您不需要设置任何其他内容,PHP 会自动创建该文件。
执行该程序后,我们可以在系统临时文件夹中找到该文件。 一般情况下,文件名的形式为:,后跟一个32位编码的随机字符串。 用编辑器打开它并查看其内容:
admin|N;
一般内容结构:
变量名 | 类型:长度:值;
并用分号分隔每个变量。 有些可以省略,例如长度和类型。
我们看一下验证程序,假设数据库存储了用户名和md5加密的密码:
// 表单提交后... $posts = $_POST; // 清除一些空白符号 foreach ($posts as $key => $value) { $posts[$key] = trim($value); } $password = md5($posts["password"]); $username = $posts["username"]; $query = "SELECT `username` FROM `user` WHERE `password` = '$password'"; // 取得查询结果 $userInfo = $DB->getRow($query); if (!emptyempty($userInfo)) { if ($userInfo["username"] == $username) { // 当验证通过后,启动 session session_start(); // 注册登陆成功的 admin 变量,并赋值 true $_SESSION["admin"] = true; } else { die("用户名密码错误"); } } else { die("用户名密码错误"); }
我们从一个需要用户验证来确定是否登录的页面开始:
// 防止全局变量造成安全隐患 $admin = false; // 启动会话,这步必不可少 session_start(); // 判断是否登陆 if (isset($_SESSION["admin"]) && $_SESSION["admin"] == true) { echo "您已经成功登陆"; } else { // 验证失败,将 $_session["admin"] 置为 false $_SESSION["admin"] = false; die("您无权访问"); } ?>
是不是很简单呢? 只需将 $ 视为存储在服务器端的数组即可。 我们注册的每个变量都是数组的key,这和使用数组没有什么区别。
如果我想退出系统怎么办? 只要毁掉它就可以了。
<?php session_start(); // 这种方法是将原来注册的某个变量销毁 unset($_SESSION["admin"]); // 这种方法是销毁整个 session 文件 session_destroy(); ?>
生命周期可以这样设置吗? 我应该彻底放弃它吗? 我想说的是,结合使用它们是最方便的。
如何判断客户端用户? 是通过ID来判断的。 ID是什么,就是文件的文件名。 ID是随机生成的,因此可以保证唯一性和随机性,保证安全。 一般情况下,如果没有设定生存期,则将ID存储在内存中。 关闭浏览器后,该ID将自动注销。 重新请求页面后,会注册一个新的 ID。
如果客户端没有被禁用,它在启动会话时起到存储ID和生存期的作用。 让我们手动设置生命周期:
session_start(); // 保存一天 $lifeTime = 24 * 3600; setcookie(session_name(), session_id(), time() + $lifeTime, "/"); ?>
其实就是一个函数arams(); 还提供了设置寿命的功能。 该函数必须在 () 函数调用之前调用:
// 保存一天 <?php $lifeTime = 24 * 3600; session_set_cookie_params($lifeTime); session_start(); $_session["admin"] = true; ?>
如果客户端使用IE 6.0,arams()会出现一些问题; 函数设置,所以我们还是手动调用函数来创建。
如果客户端被禁用怎么办? 没办法,整个生命周期都是浏览器进程。 只要关闭浏览器,再次请求页面时就得重新注册。 那么如何传递ID呢? 通过 URL 或隐藏表单传递它。 PHP 会自动将 ID 发送到 URL。 URL的格式为:.cn /index.php?=,其中URL中的参数为ID。 我们可以使用$_GET来获取值,这样就可以在页面之间传递ID了。
// 保存一天 <?php $lifeTime = 24 * 3600; // 取得当前 session 名,默认为 PHPSESSID $sessionName = session_name(); // 取得 session ID $sessionID = $_GET[$sessionName]; // 使用 session_id() 设置获得的 session ID session_id($sessionID); session_set_cookie_params($lifeTime); session_start(); $_session["admin"] = true; ?>
对于虚拟主机来说,如果所有用户的文件都保存在系统的临时文件夹中,会造成维护困难,降低安全性。 我们可以手动设置文件保存路径,()提供了这样的功能。 我们可以将存储目录指向一个无法通过Web访问的文件夹。 当然,该文件夹必须具有读写属性。
<?php // 设置一个存放目录 $savePath = "./session_save_dir/"; // 保存一天 $lifeTime = 24 * 3600; session_save_path($savePath); session_set_cookie_params($lifeTime); session_start(); $_session["admin"] = true; ?>
就像 arams(); 函数中,在调用 () 函数之前还必须先调用 () 函数。 我们还可以存储数组、对象。操作数组和操作一般变量没有区别。 如果你保存一个对象,PHP会自动序列化该对象(也称为序列化),然后将其保存进去。下面的例子说明了这一点:
<?php class person { var $age; function output() { echo $this->age; } function setAge($age) { $this->age = $age; } } ?> setage.PHP <?php session_start(); require_once "person.PHP"; $person = new person(); $person->setAge(21); $_session['person'] = $person; echo "check here to output age"; ?> output.PHP <?php // 设置回调函数,确保重新构建对象。 ini_set('unserialize_callback_func', 'mycallback'); function mycallback($classname) { $classname . ".PHP"; } session_start(); $person = $_session["person"]; // 输出 21 $person->output(); ?>
当我们执行.php文件时,调用()方法,将age设置为21,并将序列化保存进去(PHP会自动完成这个转换)。 当去.php的时候,我们需要输出这个值,刚才保存的对象必须要反序列化,而由于反序列化的时候需要实例化一个未定义的类,所以我们定义了一个后面的回调函数,自动包含.PHP类文件,所以重建对象,并获取当前的年龄值21,然后调用()方法输出该值。
至此,我已经介绍了如何在PHP中使用它。 希望对你的学习有所帮助。