PHP_php中如何使用Session对象的技巧

 2024-02-21 00:02:12  阅读 0

相对于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中使用它。 希望对你的学习有所帮助。

标签: 存储 变量 验证

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码