PHP中session共享和登录验证的实现方法

我们先来讲述一下利用session来登录

登录页面05.php的代码如下:

 代码如下 复制代码
<?php  session_start() ;                    //初始化session
if (isset ($_SESSION['shili'])){
header ("Location:shili.php") ;     //重新定向到其他页面
exit ; }  ?>
<script language="javascript">
function checklogin (){
if ((login.username.value!="") && (login.password.value!=""))
return true                    //判断用户名和密码不为空,返回TRUE
else{ alert ("昵称或密码不能为空!") } }
</script>
<style type="text/css">
.style1 { font-size: 13px;  font-family: "黑体";  font-weight: normal;   color: #0099FF; }
</style>
<div align="center">
<table width="260" border="1" bgcolor="#D8EFFA">
<form name="login" method="post" action="06.php" onSubmit="return checklogin()">
<tr align="center">
<td height="30" colspan="2"><span class="style1">管理系统登录</span></td>
</tr>
<tr>
<td width="90" align="center" class="style1">管理员: </td>
<td width="170" height="20" align="left" valign="middle"><input name="username" type="text" id="username" size="20"></td>
</tr>
<tr>
<td align="center" class="style1">密码: </td>
<td height="20" align="left" valign="middle"><input name="password" type="password" id="password" size="20"></td>
</tr>
<tr>
<td align="center" class="style1">&nbsp ; </td>
<td height="20" align="center"><input type="submit" name="Submit" value="登 录"></td>
</tr>
</form>
</table>
</div>

该程序是一个管理员登录界面,首先初始化session,然后通过检测session变量是否已经注册来检测用户是否已经登录过,如果登录过,则无需再次登录,直接定向到其他页面。这里还使用了javascript来判断是否输入了用户名和密码。
验证登录的页面

06.php的代码如下:

 代码如下 复制代码
<?php  session_start () ;                   //初始session
if (isset ($_SESSION['shili'])){
header ("Location:shili.php") ;    //重新定向到其他页面
exit ; }                       //登录过的话立即结束
$shili_name=$_POST['username'] ;    //获取参数
$password=$_POST['password'] ;
//验证管理员名称和密码是否正确,这里采用直接验证,没有连接数据库
if ($shili_name=="mr" and $password=="mrsoft"){
session_register ("shili") ;        //注册新的变量,保存当前会话的昵称
$shili = $shili_name ;
echo "<font color=red>登录成功!</font>" ;
header ("Location:shili.php") ;    //登录成功重定向到管理页面
}else{
echo "<table width='100%' align=center><tr><td align=center>" ;
echo "账号或密码错误,或者不是管理员账号<br>" ;
echo "<font color=red>登录失败!</font><br><a href='http://wyl072.blog.163.com/blog/05.php'>请重新输入</a>";
echo "</td></tr></table>" ; }  
?>

该程序同样是先通过session变量检测用户是否已经登录,如果没有,则要对输入的用户名和密码进行验证,正确则注册session变量,输出登录成功!。如不正确,则提示登录失败。
这是一个简单的用户登录验证的程序,通过session变量阻止了那些没有登录而直接浏览的用户。如果想要对某个页面限制浏览的用户,可以使用同样的方式,只要把如下的代码放在该页面的开头即可:

 代码如下 复制代码

<?php  session_start () ;
if (!isset ($_SESSION['shili'])){
echo "<p align=center>" ;
echo "<font color=#ff0000 size=5><strong><big>" ;
echo "你没有登录,请<a href='http://wyl072.blog.163.com/blog/denglu.php'>登录</a>!" ;
echo "</big></strong></font></p>" ;
exit () ;  } 
?>

利用session_id实现共享登录

先,多服务器共享session问题,这个大家应该都能够理解的,当一个网站的用户量过大,就会使用服务器集群,例如专门有一个登录用的服务器。用户通过登录服务器登录之后,登录服务器保存了用户的登录信息session,而其他受访问的服务器,例如电影服务器没有这个session,那么我们就要通过一个session的唯一标识来共享这个session了——具体session的共享超出了本文的范围,请自行查阅资料。

第二个用途就是,验证同一用户的不同会话,这个比较难理解。这样说吧,一个用户并非通过浏览器来请求连接,而是通过socket或者其它方式来请求数据的时候,我们首先要对他进行用户登录验证,验证成功之后,就下发一个sessionid给他,然后他每次请求的时候就携带这个sessionid,我们通过这个sessionid来判断session是否已经存在,如果存在我们就认定用户已经登录……

对于第一个问题,我们可以把sessionid保存在数据库中得以实现,这个方法比较安全而且应用广泛,但是不是我们讨论的范围哦

首先验证的时候产生一个sessionid;

 代码如下 复制代码

<?php
Session_start();
$sessionId = session_id();//得到sessionid
//将session下发给客户端
.........
?>

客户端携带sessionid这个变量来请求数据

 代码如下 复制代码

<?php
Session_id(‘$sessionid');//注意这个时候session_id()这个函数是带有参数的
Session_start();//这个函数必须在session_id()之后
?>

好了不问题己得到了很好的解决有需要了解的朋友可以参考一下。

时间: 2024-10-25 17:09:23

PHP中session共享和登录验证的实现方法的相关文章

PHP通过session id 实现session共享和登录验证的代码_php技巧

先说说,这个机制的用途吧,到现在为止战地知道这个机制有两个方面的用途: 首先,多服务器共享session问题,这个大家应该都能够理解的,当一个网站的用户量过大,就会使用服务器集群,例如专门有一个登录用的服务器.用户通过登录服务器登录之后,登录服务器保存了用户的登录信息session,而其他受访问的服务器,例如电影服务器没有这个session,那么我们就要通过一个session的唯一标识来共享这个session了--具体session的共享超出了本文的范围,请自行查阅资料. 第二个用途就是,验证同

ASP.NET实现在不同的子域中Session共享

今天遇到了这个问题,于是研究了一下.要解决这个问题,首先就要明白一些Session的机理.Session在服务器是以散列表形式存在的,我们都知道Session是会话级的,每个用户访问都会生成一个Session.那么服务器是怎么区分不同用户的Session?又是怎么将不同用户的Session与不同的用户绑定的呢?下面我们来研究一下,以下纯属我个人的理解,如有错误请指证. Session在服务器端是以散列表的形式存在的,区分每一个Session是通过SessionID来实现的,所以可以说这个Sess

关于 tomcat 集群中 session 共享的三种方法

前两种均需要使用 memcached 或 redis 存储 session ,最后一种使用 terracotta 服务器共享.  建议使用 redis ,不仅仅因为它可以将缓存的内容持久化,还因为它支持的单个对象比较大,而且数据类型丰富,  不只是缓存 session ,还可以做其他用途,一举几得啊.  1.使用 filter 方法存储  这种方法比较推荐,因为它的服务器使用范围比较多,不仅限于 tomcat ,而且实现的原理比较简单容易控制.  可以使用 memcached-session-f

一起谈.NET技术,ASP.NET MVC中对Model进行分步验证的解决方法

在我之前的文章:ASP.NET MVC2.0结合WF4.0实现用户多步注册流程中将一个用户的注册分成了四步,而这四个步骤都是在完善一个Model的信息,但是又分页面填写信息的,当时我加上ModelState.IsValid这句验证代码的时候,根本没法通过验证,因为在注册的前面三步,注册用户的Model信息都没填写完整,而ModelState.IsValid是对一个实体的所有属性进行判断验证的.当时很纠结,因为刚接触Asp.net MVC,故没有找到解决方案.这篇文章将给出解决的办法.看下面需要验

php session应用实例 登录验证

<html>  <head>  <title>Login</title>  <meta http-equiv="Content-Type" content="text/html; charset=gb2312">  </head>  <body>  <form name="form1" method="post" action="

php session应用实例 登录验证_php基础

复制代码 代码如下: <html> <head> <title>Login</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </head> <body> <form name="form1" method="post" action=

asp.net中session判断用户登录实现代码

今天突然想到一个判断session是否合法的做法,asp.net的,之前我们的做法是下面这样的形式的:  代码如下 复制代码  if (Session["UserID"] == "" || Session["UserID"] == null)  {      Response.Redirect("../Login.aspx?m=登录已超时,请重新登陆!");  } 一直我都觉得这个方法很不好,非常不好,但是一直也没找到好的方法

thinkphp中与subkey进行登录验证例子

使用thinkphp做一个用户登录功能是一个很简单的功能,最近公司的一个项目需要将thinkphp结合usbkey进行登录,(也就是需要插入usbkey进行登录,否则不放进行登录),开始的时候使用php+驱动(USB驱动)读取usbkey实现登录.在本地可以实现登录,上传到服务器上就不能登录(其原因就是php只能检测本地是否安装了usbkey的驱动,却不能检测其他客户端是否安装了驱动.)后来使用js来实现.这次可以实现登录. 实现的步骤: 1.安装USBKEY的驱动(本代码只使用飞天诚信USBK

在Linux中使用MD5实现用户验证的解决方法_Linux

使用openssl中的MD5函数,该函数返回16字节的unsigned char类型的数据,每个字节的范围都在0-255间,把 它格式化为十六进制就是32位md5编码.注:一个字节为8位,正好可以表示2位的十六进制. 使用登录客户端的用户名从Redis数据库中得到salt值和加密后的密码,然后把登录客户端的密码经过salt加密后,与 Redis数据库中的密码进行比较.相同则验证通过,否则验证失败. Redis数据库中密码的存储格式为password:salt 用户验证算法如下: int user