在PHP开发中就是存储在服务器端的,比较安全,而且没有那样的存储长度限制,本文简单介绍一下它的使用。
由于是在服务器端以文本文件的形式保存,所以不用担心客户端修改内容。事实上,PHP 会自动在服务器端修改文件权限,只保留系统读写权限,无法通过 FTP 进行修改,所以安全得多。开源社区门户 k%W%e2CY
比如我们要验证用户是否登录,那么就要把用户名和密码(可能是md5加密的字符串)保存在客户端,每次请求页面时都要验证。如果把用户名和密码保存在数据库中,那么每次都要执行一次数据库查询,给数据库带来了不必要的负担。因为我们不能只做一次验证。为什么?因为客户端中的信息可能会被修改。假如存储$admin变量来表示用户是否登录,当代表登录时$admin为true,当代表未登录时为false。第一次验证之后,$admin就等于true,保存在客户端中,下次就不需要验证了,这样对吗?错,如果有人伪造一个值为true的$admin变量,那不是立刻就窃取了管理权限吗?非常不安全。
不一样,它是存放在服务器端的,远程用户是无法修改文件内容的。所以我们可以简单的存放一个$admin变量,用来判断是否登录,第一次验证通过后,将$admin的值设置为true。然后判断值是否为true,如果不是,就进入登录界面。这样可以减少很多数据库操作。而且可以减少每次验证都要传递密码的不安全性(如果不使用SSL安全协议,验证只需要传递一次),即使密码用md5加密,也很容易被截取。
当然用它还有很多好处,比如容易控制,可以自定义存储等等(存放在数据库中)等等,这里就不一一赘述了。
需要在php.ini中设置吗?一般不需要,因为不是每个人都有权限修改php.ini。默认存放路径是服务器的系统临时文件夹,我们可以自定义存放在自己的文件夹中,这个后面会介绍。
让我们先来看一下如何创建它。其实它非常简单。
启动会话并创建 $admin 变量:
<?php
// 启动
();
//声明一个名为admin的变量并赋予其一个空值。
$["admin"] = 空;
如果您使用,或者 PHP 文件需要调用变量,则必须在调用之前使用 () 函数启动它。您不需要设置任何其他内容,PHP 会自动创建该文件。
执行完这个程序之后,我们可以在系统临时文件夹中找到这个文件,一般文件名是这样的:后面跟着一个32位编码的随机字符串。用编辑器打开看一下里面的内容:
管理员|N;
一般来说,内容结构如下:
变量名称|类型:长度:值;
用分号分隔每个变量。某些变量可以省略,例如长度和类型。
我们看一下验证程序,假设数据库存储了用户名和MD5加密的密码:
<?php
// 表单提交后...
$帖子=$_POST;
// 清除一些空白
($posts 作为 $key => $value)
$帖子[$key] = 修剪($value);
$ = md5($posts[""]);
$ = $posts[""];
$query = "`` FROM `user` WHERE `` = '$'";
// 获取查询结果
$ = $DB->($查询);
如果(!空($))
如果 ($[""] == $)
// 验证通过后,启动
();
// 注册登录成功的管理变量并赋值为 true
$["admin"] = true;
别的
die("用户名和密码错误");
别的
die("用户名和密码错误");
我们从需要用户认证的页面开始判断是否登录:
<?php
// 防止全局变量造成安全风险
$管理员=假;
// 启动会话,这一步必不可少
();
// 判断是否登录
如果(isset($["admin"])&& $["admin"] === true)
echo "您已成功登录";
别的
// 身份验证失败,将 $["admin"] 设置为 false
$["admin"] = false;
die("您无权访问");
是不是很简单呢?只需要把$看成一个存储在服务端的数组,我们注册的每一个变量都是这个数组的一个key,跟使用数组没什么区别。
如果想退出系统怎么办?销毁它就行了。
<?php
();
// 此方法销毁最初注册的变量
取消设置($["admin"]);
// 此方法销毁整个文件
();
>
我们可以这样设置生命周期吗?我们应该完全丢弃它吗?我认为一起使用它们最方便。
如何识别客户端用户呢?通过ID来确定。什么是ID?就是文件的文件名。ID是随机生成的,所以可以保证唯一性和随机性,保证安全性。一般如果没有设置生命周期,ID是存储在内存中的,关闭浏览器后,ID自动注销,重新请求页面后,会注册一个新的ID。
如果客户端没有被禁用,它将起到在启动会话时存储ID和生存期的作用。
让我们手动设置寿命:
<?php
();
// 保存一天
$=24*3600;
((), (), 时间() + $, "/");
其实还提供了一个函数arams()来设置生命周期,这个函数必须在调用()函数之前调用:
<?php
// 保存一天
$=24*3600;
阿拉姆($);
();
$["admin"] = true;
如果客户端使用的是IE 6.0的话,arams()函数的设置会有些问题,所以我们还是手动调用该函数来创建。
如果客户端被禁用了怎么办?没办法,所有的生命周期都是浏览器进程,只要关闭浏览器,就得重新注册才能再次请求页面。那么ID该如何传递呢?通过URL传递,或者通过隐藏表单传递。PHP会自动将ID发送到URL中。URL是这样的:,其中URL中的参数就是ID。我们可以使用$_GET来获取该值,从而实现页面之间的ID传递。
<?php
// 保存一天
$=24*3600;
// 获取当前名称,默认为
$ = ();
// 获取 ID
$ = $_GET[$];
// 使用()设置获取到的ID
($);
阿拉姆($);
();
$["admin"] = true;
对于虚拟主机来说,如果所有用户的文件都保存在系统临时文件夹中,会造成维护困难,降低安全性。我们可以手动设置文件保存路径,()就提供了这样的功能。我们可以将存储目录指向一个无法通过Web访问的文件夹,当然该文件夹必须具有读写属性。
<?php
// 设置存储目录
$ =“.//”;
// 保存一天
$=24*3600;
($);
阿拉姆($);
();
$["admin"] = true;
与 arams(); 函数一样,在调用 () 函数之前也必须调用 () 函数。
我们还可以在 中存储数组和对象。操作数组和操作一般变量没什么区别,而且在保存对象时,PHP 会自动将对象序列化(也叫序列化)然后再保存在 中。下面的例子说明了这一点:
<?php
班级
变量$年龄;
(){
回声$this->年龄;
($年龄) {
$this->年龄 = $年龄;
.php
<?php
();
“.php”;
$ = 新的();
$->(21);
$[''] = $;
echo "<a href=''>点击此处查看年龄</a>";
.php
// 设置回调函数以确保对象被重建。
('_func','');
($) {
$.“。php”;
();
$ = $[""];
// 输出 21
$->();
当我们执行.php文件时,会调用()方法,将age设置为21,并将状态序列化并保存进去(PHP会自动完成这个转换)。当传输到.php时,要输出这个值,必须反序列化刚才保存的对象。因为反序列化时需要实例化一个未定义的类,所以我们定义了一个回调函数来自动包含.php类文件。因此,会重构对象,并获取当前age值为21,然后调用()方法输出该值。
另外我们还可以使用dler函数来自定义调用方式。
扫一扫在手机端查看
-
Tags : php 默认 session 时间
我们凭借多年的网站建设经验,坚持以“帮助中小企业实现网络营销化”为宗旨,累计为4000多家客户提供品质建站服务,得到了客户的一致好评。如果您有网站建设、网站改版、域名注册、主机空间、手机网站建设、网站备案等方面的需求,请立即点击咨询我们或拨打咨询热线: 13761152229,我们会详细为你一一解答你心中的疑难。