① php中使用session防止用户非法登录后台的方法
本文实例讲述了php中使用session防止用户非法登录后台的方法。分享给大家供大家参考。具体如下:
一般来说,我们登录网站后台时,服务器会把登录信息保存到session文件里,并通过读取session文件来判断是否可以进行后台操作。
以下面为例,假如admin.php是我们的后台操作页面,如果没有启用
session,那么,即便是没有登录,用户照样能访问到该页面,这时候,就需要用到
session
来防止用户非法登录到这个页面了。下面是三个文件的代码
登录页面:login.php
复制代码
代码如下:<h2>用户登录页面</h2>
<form
action="loginProcess.php"
method="post">
用户名:<input
type="text"
name="username"><br
/>
密 码:<input
type="password"
name="pwd"><br
/>
<input
type="submit"
name="sub"
value="登录后台">
</form>
<?php
if(!empty($_GET['errno'])){
if($_GET['errno']==1){
echo
"用户名或密码错误";
}else
if($_GET['errno']==2){
echo
"请输入用户名密码";
}else
if($_GET['errno']==3){
echo
"非法访问,请输入用户名和密码";
}
}
?>
登录信息处理页面:loginProcess.php
复制代码
代码如下:<?php
//这里主要讲session,关于登录信息验证,就不涉及到数据库了
//接收登录信息,保存session
if(!empty($_POST['sub'])){
if($_POST['username']=="admin"
&&
$_POST['pwd']=="admin"){
echo
"登录成功";
session_start();//开启session
$_SESSION['username']
=
$_POST['username'];//将登录名保存到session中
header("Location:
admin.php");
exit();
}else{
header("Location:
login.php?errno=1");
exit();
}
}else{
header("Location:
login.php?errno=2");
exit();
}
?>
后台文件:admin.php
复制代码
代码如下:<?php
session_start();
if(empty($_SESSION['username'])){
header("Location:
login.php?errno=3");
exit();
}
echo
"你是管理员,你现在拥有后台管理权限";
?>
希望本文所述对大家的php程序设计有所帮助。
② PHP会话验证问题,怎么解决
会话控制的思想就是指能够在网站中根据一个会话跟踪用户。这里整理了详细的代码,有需要的小伙伴可以参考下。
概述
http 协议是无状态的,对于每个请求,服务端无法区分用户。PHP 会话控制就是给了用户一把钥匙(一个加密session字符串),同时这也是用户身份的一个证明,服务端存放了这把钥匙能打开的箱子(数据库,内存数据库或者使用文件做的),箱子里面装的就是用户的各个变量信息。
传统的php session 使用
<?php
//page1.php 启动一个会话并注册一个变量
session_start();
$_SESSION['user_var'] = "hello,codekissyoung!";
//这里的可以将$_SESSION理解为用户的箱子,实际的实现是php在服务器端生成的小文件
?>
<?php
//page2.php
session_start();
echo $_SESSION['user_var'];//通过钥匙访问自己的箱子内的变量
$_SESSION['user_var'] = "bey,codekissyoung!";
?>
<?php
//page3.php 销毁钥匙,一般在用户注销时,访问page3.php文件
session_start();
session_destroy();
?>
提一个问题,钥匙呢?没看见给用户钥匙的操作啊?
这个操作是php背后帮我们做了的,自从你访问page1.php 程序运行,session_start();这句时,php 会根据此刻的一些条件(用户ip,浏览器号,时间等)生成一个PHPSESSID变量,http response 回客户端后,这个PHPSESSID就已经存在你的浏览器cookie里了,每次你再次访问这个域名时,该PHPSESSID都会发送到服务端。这个PHPSESSID 就是我这里说的用户钥匙了。
再一个问题,这个PHPSESSID的安全性,它是否容易被窃取,是否容易被伪造,是否容易被篡改?
使用 Https 可以防止被篡改。不使用PHPSESSID,而是自己生成一把秘钥给用户可以防止被伪造。至于是否容易被窃取,还真没怎么研究过。比如如果你电脑连着网,黑客入侵你电脑。
将生成的秘钥存入浏览器cookie中
设置cookie
setCookie('key','value',time()+3600);
删除cookie
setCookie('key','',time()-1);
实现单点登录:session共享
单点登录:多个子系统之间共用一套用户验证体系,在其中一处登录,就可以访问所有子系统。
试想这么一种情景:假设服务器A与B的php环境一致。用户在 服务器A 上拿到了自己的钥匙,然后他拿着这把钥匙去访问服务器B,请问服务器B认识么?
很显然不能,服务器A生成的钥匙,服务器并不认识。
解决办法:用户无论访问A或B,生成的钥匙我都存储在C(同一个数据库,或缓存系统)中,用户再次访问A或B时,A和B都去问下C:这个用户的钥匙对么?对的话,用户就可以使用自己存在A或者B那里的箱子了。
下面是php通过会话控制实现身份验证实例
身份验证应用程序主体:authmain.PHP
网站的有效用户检查:members_only.php
注销会话变量并销毁会话:logout.php
③ php登录验证问题session
你可以在数据库中创建一个session表,里面存放已登录用户的
用户名、登陆IP、随机码
重要提示:用户每成功登陆一次,那么就更新IP和随机码,随机码会存在$_SESSION['code']里
假设A在机器01上登陆过,那么seesion表存 A、127.0.0.1、123456
情况(1):
1、当A在另外一个机器02从登陆页面登陆,那么按“重要提示”的操作方法,session的数据会被更新成 A、127.0.0.2、456789.
2、然后A在第一台机器01上刷新网页,程序发现数据库中A最新的登陆IP有变动,那么在机器01上将A踢下线。
情况(2):
1、A在同一机器上的另外一个浏览器从登陆页面登陆,那么按“重要提示”的操作方法,session的数据会被更新成 A、127.0.0.1、987545.
2、然后A在第一台机器01上的第一个浏览器刷新网页,程序发现该浏览器与服务器的SESSION中保存的$_SESSION['code']与数据库中A最新的登陆随机码不同,那么在第一个浏览器上将A踢下线。
补充一点:同一台机器上所有利用IE内核的浏览器,其实session是通用的,不管你用纯正的IE、还是各大浏览器的兼容模式,或者是IETester的各个浏览器版本
④ php网站验证登录后怎么跳向用户管理页面
PHP登陆后跳转到用户管理页面,利用$_SERVER全局变量可以实现这个功能。
具体实现方法为:在提示用户登录的同时,在session或者cookie中记录下请求页面的URL;登录验证成功后在跳转回该URL。
1、checklogin.php代码:
session_start();
if (!isset ($_SESSION['login_ok']))
{
echo "<script language=javascript>alert ('要访问的页面需要先登录。');</script>";
$_SESSION['userurl'] = $_SERVER['REQUEST_URI'];
echo '<script language=javascript>window.location.href="login.php"</script>';
}
2、login.php代码
session_start();
//此处省略了账号密码验证代码,验证OK再执行下面代码
if (isset ($_SESSION['userurl']))
{
//会话中有要跳转的页面
$url = $_SESSION['userurl'];
}
else
{
//没有要跳转的页面,则转到首页
$url = "userManager.php";
}
//0.5s后跳转
echo "<meta http-equiv=\"refresh\" content=\"0.5;url=$url\">";