程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP中session共享和登錄驗證的實現方法

PHP中session共享和登錄驗證的實現方法

編輯:關於PHP編程

本文章詳細的介紹了session普通的後台管理登錄以及利用session id 實現多台服務器之間的用戶共享登錄的方法,有需要了解的朋友可查看一下全文章。

我們先來講述一下利用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()之後
?>

好了不問題己得到了很好的解決有需要了解的朋友可以參考一下。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved