php中session的使用方法

來源:互聯網
上載者:User

PHP中的session預設情況下是使用用戶端的Cookie。當用戶端的Cookie被禁用時,會自動通過Query_String來傳遞。

Php處理會話的函數一共有11個,我們詳細介紹一下將要用到幾個函數。

1、 session_start

函數功能:開始一個會話或者返回已經存在的會話。

函數原型:boolean session_start(void);

傳回值:布爾值

session工作原理

首先,PHP為建立Session的使用者產生一個獨一無二的字串,用來標誌這個使用者的session.一般將這個字串稱作Session Id.然後“sess”+Session Id為檔案名稱(例如一個Session ID為111,那麼檔案名稱為sess_111)在伺服器的檔案系統中建立一個檔案,在檔案中儲存使用者在Session所定義的全域變數的變數名和值。然後再將Session Id作為一個名為PHPSession的Cookie儲存在使用者端的檔案系統中。
  然後,當使用者再次串連伺服器訪問一個PHP指令碼時,PHP從使用者發來的PEESession這個Cookie中得到使用者所在Session的Session Id,並根據Session Id從伺服器的檔案系統中儲存Session資訊的檔案。最後從這個檔案中讀出使用者在上次串連時所設定的全域變數的值。
  因此,我們可以看到Session的工作原理和我們上一節所介紹的身份認證的工作原理是一樣的。所不同的只是Session將資訊儲存在了伺服器的檔案系統中,而我們將資訊儲存在了資料庫中。當然使用Session好處就是資料的儲存和擷取是由PHP自動完成的,而直接使用Cookie的話就需要自己動手進行資料的儲存和擷取。
  Session利用Cookie的身份標誌功能,將使用者在瀏覽網站時需要儲存的資訊儲存在伺服器上。這樣Session既克服了HTTP協議的缺陷,又防止了資訊的泄漏,而且方便了編程者的使用,是一個非常好的解決方案。不過,Session的功能只有PHP4支援,PHP3是不支援Session的。因此使用PHP3進行網站構建的讀者只能採用直接使用Cookie的方式。

session執行個體


在用session的時候,要先把php中的php.ini檔案中session.sava.path項設定好.

 代碼如下 複製代碼

<?php 
// 啟動 Session 
session_start();
// 聲明一個名為 admin 的變數,並賦空值。
    $_SESSION["admin"] = null;
     ?>
<?php 
// 表單提交後… 
$posts = $_POST; 
// 清除一些空白符號 
foreach ($posts as $key => $value) 
{       $posts[$key] = trim($value);     }
$password = md5($posts["password"]);
     $username = $posts["username"];
      $query = “SELECT `username` FROM `user` WHERE `password` = ‘$password’”;
     // 取得查詢結果
      $userInfo = $DB->getRow($query);
       if (!empty($userInfo))
         {
            if ($userInfo["username"] == $username)
           {         // 當驗證通過後,啟動 Session  
             session_start();    
             // 註冊登陸成功的 admin 變數,並賦值 true  
               $_SESSION["admin"] = true; 
          }   
       else  
        {     
            die(“使用者名稱密碼錯誤”);  
        } 
      } 
       else
        {   
           die(“使用者名稱密碼錯誤”);
         }
         ?>  
          我們在需要使用者驗證的頁面啟動 Session,判斷是否登陸:
          <?php
           // 防止全域變數造成安全隱患
            $admin = false; 
         // 啟動會話,這步必不可少 
         session_start();
          // 判斷是否登陸
           if (isset($_SESSION["admin"]) && $_SESSION["admin"] === true)
             {   
              echo “您已經成功登陸”; 
           }
            else 
            {       // 驗證失敗,將 $_SESSION["admin"] 置為 false
                 $_SESSION["admin"] = false; 
                die(“您無權訪問”); 
             }
             ?>
             <?php     session_start();
              // 儲存一天
               $lifeTime = 24 * 3600; 
               setcookie(session_name(), session_id(), time() + $lifeTime, “/”);
               ?>
<?php     session_start(); 
// 這種方法是將原來註冊的某個變數銷毀
    unset($_SESSION["admin"]);
     // 這種方法是銷毀整個 Session 檔案
      session_destroy();
    ?>   
    我們來手動設定 Session 的生存期:
     <?php     session_start();
       // 儲存一天
     $lifeTime = 24 * 3600;
      setcookie(session_name(), session_id(), time() + $lifeTime, “/”);
      ?>  
其實 Session 還提供了一個函數 session_set_cookie_params(); 來設定 Session 的生存期的,該函數必須在 session_start() 函數調用之前調用:
<?php 
// 儲存一天 
$lifeTime = 24 * 3600; 
session_set_cookie_params($lifeTime); 
session_start();
    $_SESSION["admin"] = true;
?>

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.