乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      PHP Session的生存周期與用法詳解

       好亂非常亂 2016-09-25

      session 是一種服務(wù)器端用于存儲有關(guān)用戶會話信息的機(jī)制,服務(wù)器使用一種類似于散列表的結(jié)構(gòu),也可能就是使用散列表,來保存信息.

      當(dāng)程序需要為某個客戶端的請求創(chuàng)建一個 session 的時候,服務(wù)器首先會檢查這個客戶端是否已經(jīng)包含了一個 session 標(biāo)識,這個我們稱為 session id(獲取方法為 session_id()),如果已包含一個 session id 則說明此客戶端之前已經(jīng)創(chuàng)建過 session,服務(wù)器則按照 session id 把這個 session 中的值檢索出來,如果客戶端不包含 session id,說明此客戶端第一次請求服務(wù)器或手動清除過緩存文件,則為此客戶端創(chuàng)建一個 session 并且生成一個與此 session 相關(guān)聯(lián)的 session id,一般來說,session id 的值是不會重復(fù)的,并且加密的字符串,這個 session id 將被在本次響應(yīng)中返回給客戶端保存.

      session 在何時被創(chuàng)建?

      通常(是指通常)是在瀏覽器向服務(wù)器端第一次請求時被創(chuàng)建,并且它會占用一定的內(nèi)存空間,因此在不必要的情況下,盡最關(guān)閉 session.

      session 何時被刪除

      通常情況下,session 在會在這幾種情況下被刪除,一是使用 session_destroy() 重置函數(shù)手動刪除,二是 session 的上次活動時間距離當(dāng)前時間的間隔超過了 session 的超時設(shè)置的時間,三是服務(wù)器進(jìn)程被停止.

      怎么在瀏覽器關(guān)閉時刪除 session

      理論上來說,是做不到這一點,http是一種無狀態(tài)協(xié)議,因此服務(wù)器不知道客戶端什么時候關(guān)掉的瀏覽器,并且PHP也沒有一個關(guān)相的函數(shù)來獲取此項信息,但這個問題還可以得到解決,就是使用代碼 window.oncolose 來監(jiān)視瀏覽器的關(guān)閉動作,然后用Ajax向服務(wù)器端發(fā)送一個請求來刪除 session,但這個辦法也并不會完全解決問題,原因是在有些情況下比如瀏覽器崩潰、突然斷電、用戶死機(jī)等這些時候并不能作出反應(yīng)。

      在PHP中有關(guān)Session的函數(shù)比較多,不過我們最常用到的也就這么幾個函數(shù):

      session_start(), session_register(),session_unregister(),

      session_is_registered(),session_destroy函數(shù).

      session_start():啟用session機(jī)制,在需要用到session的程序文件的最開始調(diào)用它.

      session_register():注冊session變量

      session_unregister(): 刪除session變量(一個一個刪除)

      session_is_registered(): 判斷session變量是否注冊

      session_distroy(): 銷毀所有session變量(所有session變量銷毀)

      我們來看一下驗證程序,假設(shè)數(shù)據(jù)庫存儲的是用戶名和 md5 加密后的密碼,代碼如下:

      // 表單提交后...  
      $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'';  
      // 取得查詢結(jié)果  
      $userInfo = $DB->getRow($query);
       
      if (!emptyempty($userInfo))  
      {  
      if ($userInfo['username'] == $username)  
      {  
      // 當(dāng)驗證通過后,啟動 Session  
      session_start();  
      // 注冊登陸成功的 admin 變量,并賦值 true  
      $_SESSION['admin'] = true;  
      }  
      else
      {  
      die('用戶名密碼錯誤');  
      }  
      }
      else
      {
      die('用戶名密碼錯誤');  
      }

      我們在需要用戶驗證的頁面啟動 Session,判斷是否登陸,代碼如下:

      // 防止全局變量造成安全隱患  
      $admin = false;
       
      // 啟動會話,這步必不可少  
      session_start();
       
      // 判斷是否登陸  
      if (isset($_SESSION['admin']) && $_SESSION['admin'] === true)  
      {  
      echo '您已經(jīng)成功登陸';
      }  
      else  
      {
      // 驗證失敗,將 $_SESSION['admin'] 置為 false
      $_SESSION['admin'] = false;  
      die('您無權(quán)訪問');  
      }

      需要注意下面幾個方面:

      1.函數(shù)session_start()必須在程序最開始執(zhí)行,在其前面不能有任何輸出內(nèi)容,否則就會出現(xiàn)“Warning:Cannot send session cookie - headers already sent'類似這樣的警告信息.

      2.函數(shù)session_register()用于注冊要保存在session中的相關(guān)變量,其用法如下:

       $val = 'session value';
       session_register('val');
      >

      val即為要注冊的session變量名,在注冊時一定不要加上'$'符號,只寫其變量名稱即可.

      3.函數(shù)session_unregister()與上面函數(shù)用法完全相同,但功能相反,上面函數(shù)是注冊session變量,而其則是刪除指定的session變量.

      4.函數(shù)session_is_registered()用于判斷session變量是否注冊.

      5.函數(shù)session_destroy()主要用于在系統(tǒng)注銷和退出時,銷毀所有的session變量,它沒有參數(shù),直接調(diào)用即可.


        本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多