php中使用session防止用户非法登录后台的方法

登录页面:login.php php

用户登录页面

<form action="loginProcess.php" method="post"> 用户名:<input type="text" name="username">
密码:<input type="password" name="pwd">
<input type="submit" name="sub" value="登录后台"> </形式> <?php if(!empty($_GET['errno'])) { if($_GET['errno']==1 ){ echo "用户名或密码错误"; }elseif($_GET['errno']==2 ){ echo "请输入用户名和密码"; }elseif($_GET['errno']==3 ){ echo "访问无效,请输入用户名和密码"; } ?>
登录信息处理页面:loginProcess.php php <?php // 这里讨论的是session,讨论的是登录信息的认证,不涉及数据库。
//接收登录信息并保存session if(!empty($_POST['sub'])) { if($_POST['用户名']=="管理员"&&$_POST['密码']=="管理员"){ echo "登录成功"; 会话开始(); // 启动会话 $_SESSION['用户名']=$_POST['用户名']; // 将登录名保存到会话中 标题(“位置:admin.php”); 出口(); }其他{ header("位置:login.php?errno=1 "); 出口(); } }其他{ header("位置:login.php?errno=2 "); 出口(); } ?>
后端文件:admin.php php <?php 会话开始(); if(空($_SESSION['用户名'])) { header("位置:login.php?errno=3 "); 出口(); } echo "您是管理员,现在拥有后台管理权限"; ?>
Sessions可以防止用户非法登录后台。
在 admin.php 中,通过检查会话是否包含用户名来验证用户是否已登录。
如果会话为空,则重定向回登录页面。

php的CI框架,如何使用session

哦,对了,session其实有两种使用方式。

一个是最简单的,PHP原创的。
就像这样,只需使用 $_SESSION['name'] = "name";设置它。
然后使用 echo $_SESSION['name'];无论您想在哪里显示它。
就这么简单,每个人都能理解。

The second is used in the CodeIgniter framework.这有点复杂,但它有效。

首先,转到 (ci)application/config 下的 config.php 文件并找到这一行:$config['encryption_key'] = '';。
在此行中您必须输入一个值。
它可以是任何东西,但不能为空。
一般填写一些英文即可,不要太复杂。

然后转到 (ci)application/config 下的 auto.php 文件并找到这一行:$autoload['libraries'] = array('');。
For this line, change it to: $autoload['libraries'] = array('session');.这意味着加载会话库。
或者也可以在控制文件夹下的文件中写入,例如构造方法中:$this->load->library('session');。
那也很好。

好了,环境就这样配置了。
现在是时候编写代码了。

当你想设置会话时,只需输入:$this->session->set_userdata('name', 'yang');。
In this way, there is a value of name in the session, and the value is yang.
如果你想提取并显示它,只需输入:echo $this->session->userdata('name');。

如果是数组,比如你想放username、email、logged_in等,就这样写: $newdata = array('username' => 'johndoe', 'email' => 'johndoe@some-site.com', 'logged_in' => TRUE);,然后$this->userdata.->
Sessions会在每个页面加载完后开始运行,所以session类必须是首先初始化。
它可以在控制器中初始化或自动加载到系统中。
在autoload.php中设置:$autoload['libraries'] = array('session');。
或者使用 $this->load->library('session');在控制器构造函数中初始化。

一旦加载,会话就可以像这样使用:$this->session。
大多数会话类将在后台运行,因此一旦会话被初始化,会话数据将自动被读取、创建和更新。

需要知道的一件事是,一旦会话类被初始化,它将自动运行。
你可以完全忽略接下来发生的事情。
你可以使用session正常工作,甚至可以添加自己的session数据,而在这整个过程中,读、写、更新操作都是自动完成的。

页面加载后,会话类将检查用户的 cookie 中是否有有效的会话数据。
如果会话数据不存在(或已过期),则会创建一个新会话并将其存储在 cookie 中。
如果会话数据存在,则信息将更新,cookie也会同时更新。
每次更新都会重新创建 session_id 的值。

By default, the SessionCookie will only be updated every 5 minutes, which will reduce the load on the processor.如果您反复重新加载页面,您会注意到“上次活动”时间在五分钟或更长时间内没有改变,这是上次写入cookie的时间。
This time can be changed by setting the $config['sess_time_to_update'] line in the application/config/config.php file.

php如何实现session的管理

等等,我昨天在调试会话时遇到了一些奇怪的情况。
用户在后台修改权限后,页面突然跳转到登录页面,并提示会话已过期。
我查看日志,发现旧的会话文件仍然存在于服务器上,但是会话ID已经改变了。
这是否意味着session_regenerate_id(true)执行成功?但很明显,用户并没有主动刷新页面。
等等,我突然想到,会不会是服务器负载过高,导致中间件在处理请求时触发了会话超时检查?该客户端使用Nginx,配置的会话超时时间为3 0分钟。