實例一最基本的用戶登錄,跑到指定頁面這個不安全,如果用戶知道你這個地址就不需要登錄了,實例二利用了session也是較常用的在操作頁面加了session驗證,但是無法記住下次登錄,實例三就利用了session和cookie同時登錄并可以自動記錄下次自動登錄功能。
我們先來看個最簡單的實例,以下附簡單的login.htm內容,代碼如下:
- <html>
- <body>
- <form name="login" action="login.php" method=post>
- 用戶名<input type=text name="name">
- <p>密碼<input type=password name="password">
- <p>
- <input name="log" type=submit value="登錄">
- </form>
- </body>
- </html>
login.php內容如下:
- <?
- error_reporting(0);
- $mysql_servername = "localhost"; //主機地址
- $mysql_username = "root"; //數據庫用戶名
- $mysql_password =""; //數據庫密碼
- $mysql_database ="peng"; //數據庫
- mysql_connect($mysql_servername , $mysql_username , $mysql_password);
- mysql_select_db($mysql_database);
- $name=$_POST['name'];
- $passowrd=$_POST['password'];
- if ($name && $passowrd){
- $sql = "SELECT * FROM liuyanban WHERE name = '$name' and password='$passowrd'";
- $res = mysql_query($sql);
- $rows=mysql_num_rows($res);
- if($rows){
- header("refresh:0;url=a.htm");//跳轉頁面,注意路徑
- exit;
- }
- echo "<script language=javascript>alert('用戶名密碼錯誤');history.back();</script>";
- }else {
- echo "<script language=javascript>alert('用戶名密碼不能為空');history.back();</script>";
- }
- ?>
下面還有一個我剛學php 是寫的,代碼如下:
- <input name="myname" type="text" id="myname" style="border:solid 0px;" />
- <input name="mypass" type="password" id="mypass" style="border:solid 0px;" />
php代碼如下:
- <?
- session_start();//這個一定要申明嘍,給個小提示:在session之前不能有任何輸出哦,在php.5以下的版本會有問題.
- $myname =get_value('myname',post);
- $mypass =get_value('mypass',post);
- if(!preg_match("/^w+$/",$myname) || strlen($myname)<3 || strlen($myname)>15 ){
- alert('輸入的用戶名信息有誤!用戶名必須由數字下劃線英語字母組成,長度為3-15個字符!','');
- }
- if(!preg_match("/^w+$/",$mypass) || strlen($mypass)<6 || strlen($mypass)>15 ){
- alert('輸和的用戶密碼!密碼必須由數字下劃線英語字母組成,長度為6-15個字符!','');
- }
- $sql ="select * from tbn where admin_name='$myname' and admin_pwd='".md5($mypass)."'";
- $result =mysql_query($sql);
- if(mysql_num_rows($result) ){
- $my =mysql_fetch_array($result);
- $_SESSION['uid']=$myname;
- //$_SESSION['auth']=return_auth($my['group_id']); //這里是因為用到用戶組取得用戶組的權限
- header("location:main.php");
- }else{
- alert('提示:你輸入的用戶名與密碼不一致!','');
- }
- ?>
上面的實例我都只保存信息到了session下面來看個同時應用session和cookie來保存用戶登錄信息
1,數據庫連接設備頁面:connectvars.php,代碼如下:
- <?php
- //數據庫的地位
- define(""DB_HOST"", ""127.0.0.1"");
- //用戶名
- define(""DB_USER"", ""root"");
- //口令
- define(""DB_PASSWORD"", ""19900101"");
- //數據庫名
- define(""DB_NAME"",""test"") ;
- ?>
2、登錄頁面:logIn.php,代碼如下:
- <?php
- //插入連接數據庫的相干信息
- require_once ""connectvars.php"";
- //開啟一個會話
- session_start();
- $error_msg = "";
- //若是用戶未登錄,即未設置$_SESSION[""user_id""]時,履行以下代碼
- if(!isset($_SESSION[""user_id""])){
- if(isset($_POST[""submit""])){//用戶提交登錄表單時履行如下代碼
- $dbc = mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_NAME);
- $user_username = mysqli_real_escape_string($dbc,trim($_POST[""username""]));
- $user_password = mysqli_real_escape_string($dbc,trim($_POST[""password""]));
- if(!emptyempty($user_username)&&!emptyempty($user_password)){
- //MySql中的SHA()函數用于對字符串進行單向加密
- $query = "SELECT user_id, username FROM mismatch_user WHERE username = ""$user_username"" AND "."password = SHA(""$user_password"")";
- $data = mysqli_query($dbc,$query);
- //用用戶名和暗碼進行查詢,若查到的記錄正好為一條,則設置SESSION和COOKIE,同時進行頁面重定向
- if(mysqli_num_rows($data)==1){
- $row = mysqli_fetch_array($data);
- $_SESSION[""user_id""]=$row[""user_id""];
- $_SESSION[""username""]=$row[""username""];
- setcookie(""user_id"",$row[""user_id""],time()+(60*60*24*30));
- setcookie(""username"",$row[""username""],time()+(60*60*24*30));
- $home_url = ""loged.php"";
- header(""Location: "".$home_url);
- }else{//若查到的記錄不合錯誤,則設置錯誤信息
- $error_msg = ""Sorry, you must enter a valid username and password to log in."";
- }
- }else{
- $error_msg = ""Sorry, you must enter a valid username and password to log in."";
- }
- }
- }else{//若是用戶已經登錄,則直接跳轉到已經登錄頁面
- $home_url = ""loged.php"";
- header(""Location: "".$home_url);
- }
- ?>
- <html>
- <head>
- <title>Mismatch - Log In</title>
- <link rel="stylesheet" type="text/css" href="style.css" />
- </head>
- <body>
- <h3>Msimatch - Log In</h3>
- <!--經由過程$_SESSION[""user_id""]進行斷定,若是用戶未登錄,則顯示登錄表單,讓用戶輸入用戶名和暗碼-->
- <?php
- if(!isset($_SESSION[""user_id""])){
- echo ""<p class="error">"".$error_msg.""</p>"";
- ?>
- <!-- $_SERVER[""PHP_SELF""]代表用戶提交表單時,調用自身php文件 -->
- <form method = "post" action="<?php echo $_SERVER[""PHP_SELF""];?>">
- <fieldset>
- <legend>Log In</legend>
- <label for="username">Username:</label>
- <input type="text" id="username" name="username"
- value="<?php if(!empty($user_username)) echo $user_username; ?>" />
- <br/>
- <label for="password">Password:</label>
- <input type="password" id="password" name="password"/>
- </fieldset>
- <input type="submit" value="Log In" name="submit"/>
- </form>
- <?php
- }
- ?>
- </body>
- </html>
3、登入頁面,loged.php,代碼如下:
- <?php
- //應用會話內存儲的變量值之前必須先開啟會話
- session_start();
- //若是會話沒有被設置,查看是否設置了cookie
- if(!isset($_SESSION[""user_id""])){
- if(isset($_COOKIE[""user_id""])&&isset($_COOKIE[""username""])){
- //用cookie給session賦值
- $_SESSION[""user_id""]=$_COOKIE[""user_id""];
- $_SESSION[""username""]=$_COOKIE[""username""];
- }
- }
- //應用一個會話變量搜檢登錄狀況
- if(isset($_SESSION[""username""])){
- echo ""You are Logged as "".$_SESSION[""username""].""<br/>"";
- echo ""<a href="logOut.php"> Log Out("".$_SESSION[""username""]."")</a>"";
- }
- /**在已登錄頁面中,可以哄騙用戶的session如$_SESSION[""username""]、
- * $_SESSION[""user_id""]對數據庫進行查詢,可以做很多多少很多多少工作*/
- ?>
4、刊出session與cookie頁面,logOut.php(刊出后重定向到lonIn.php),代碼如下:
- <?php
- /**同時刊出session和cookie的頁面*/
- //即使是刊出時,也必須起首開端會話才干接見會話變量
- session_start();
- //應用一個會話變量搜檢登錄狀況
- if(isset($_SESSION[""user_id""])){
- //要清除會話變量,將$_SESSION超等全局變量設置為一個空數組
- $_SESSION = array();
- //若是存在一個會話cookie,經由過程將到期時候設置為之前1個小時從而將其刪除
- if(isset($_COOKIE[session_name()])){
- setcookie(session_name(),"""",time()-3600);
- }
- //應用內置session_destroy()函數調用撤銷會話
- session_destroy();
- }
- //同時將各個cookie的到期時候設為疇昔的某個時候,使它們由體系刪除,時候以秒為單位
- setcookie(""user_id"","""",time()-3600);
- setcookie(""username"","""",time()-3600);
- //location首部使瀏覽看重定向到另一個頁面
- $home_url = ""logIn.php"";
- header(""Location:"".$home_url);
- ?>
用戶注冊登錄涉及到用戶信息與數據庫的交互,因此要特別注意用戶提交的信息不能為非法信息,本例中注冊部分已經使用正則表達式做了限制,對登錄部分只簡單使用了 htmlspecialchars() 處理,實際應用時可更嚴格一些。
本教程只是簡單演示用戶注冊與登錄的過程,其代碼僅供學習參考,不可直接用于項目生產。
對于用戶登錄成功后采用 session 來管理,也可以采用 cookie 來管理,尤其對于有時限要求的情況。
為了提高用戶體驗,用戶注冊部分可以結合 AJAX 來檢測用戶輸入的信息而不必等點擊提交后再檢測。
新聞熱點
疑難解答