首頁 後端開發 php教程 Cookie禁用了,Session還能用嗎?

Cookie禁用了,Session還能用嗎?

Jul 28, 2016 am 08:28 AM
cookie nbsp php quot session

   Cookie與 Session,一般認為是兩個獨立的東西,Session採用的是在伺服器端保持狀態的方案,而Cookie採用的是在客戶端保持狀態的方案。但為什麼禁用Cookie就不能得到Session呢?因為Session是用Session ID來確定目前對話所對應的伺服器Session,而Session ID是透過Cookie來傳遞的,禁用Cookie相當於失去了Session ID,也就得不到Session了。
       是不是Cookie讓停用了,Session就一定不能用了呢?
       1. ASP
       在ASP中,Session必須倚賴Cookie才可用,Session是儲存在伺服器端的,而Cookie是儲存在客戶端的,相對而言,Session的安全性和可靠度都比Cookie高。
       2. PHP
       在PHP中,且透過相關的配置,且可讓Session不依賴Cookie而存在。這是因為:
       Session,儲存於伺服器端(預設以文件方式儲存Session),根據客戶端提供的Session ID來得到使用者的文件,取得變數的值,Session ID可以使用客戶端的Cookie或Http1. 1協定的Query_String(就是存取的URL的「?」後面的部分)來傳送給伺服器,然後伺服器讀取Session的目錄…。也就是說,Session ID是取得儲存在服務上的Session變數的身分證。當程式碼session_start();運行的時候,就在伺服器上產生了一個Session文件,隨之也產生了與之唯一對應的一個Session ID,定義Session變數以某種形式儲存在剛才產生的Session檔案中。透過Session ID,可以取出定義的變數。跨頁後,為了使用Session,你必須又執行session_start();將會又會產生一個Session文件,與之對應產生對應的Session ID,用這個session id是取不出前面提到的第一個Session文件中的變數的,因為這個Session ID不是打開它的「鑰匙」。如果在session_start();之前加上程式碼session_id($session id);將不產生新的Session文件,直接讀取與這個id對應的Session文件。
       PHP中的Session預設是使用客戶端的Cookie來儲存Session ID的,所以當客戶端的cookie出現問題的時候就會影響Session了。必須注意的是:Session不一定必須依賴Cookie,這也是Session相比Cookie的高明之處。當客戶端的Cookie被停用或出現問題時,PHP會自動把Session ID附著在URL中,這樣再透過Session ID就能跨頁使用Session變數了。但這種附著也是有一定條件的,即「php.ini中的session.use_trans_sid = 1“,或編譯時打開打開了“--enable-trans-sid”選項。
       用過論壇的朋友都知道,在進入論壇的時候,往往會提示你檢查Cookie是否打開,這是因為大多數論壇都是基於Cookie的,論壇用它來保存用戶名、密碼等用戶訊息,方便使用。完全可以用Session來代替Cookie,它可以不依賴於客戶端是否開啟Cookie。 :
       1. 設定php.ini設定檔中的“session.use_trans_sid = 1”,或在編譯時開啟了“--enable-trans-sid”選項,讓PHP自動跨頁傳遞Session ID。 >       2. 手動透過URL傳值、隱藏表單傳遞Session ID。 -------------------------------------------------- -------------------------------------------------- --------------
                  // s1.php
           session_start()           $url="下一頁";
       url;
       ?>
       ---------------------------------------- -------------------------------------------------- -------------------------
       ---------------------- -------------------------------------------------- -------------------------------------------
                  // s2.php
           session_start();
        ses   ?>
       ---- -------------------------------------------------- -------------------------------------------------- -----------
       執行上述程式碼,在客戶端cookie正常的情況下,應該可以在得到結果"中華人民共和國"。
       現在你手動關閉客戶端的cookie,再運行,可能無法取得結果了吧。如果得不到結果,再設定php.ini檔案中的”session.use_trans_sid = 1“,或編譯時開啟開啟了”--enable-trans-sid選項”,又得到結果「中華人民共和國」。
       途徑2舉例說明:
       --------------------------------------- -------------------------------------------------- --------------------------
                  // s1.php
           session_start();
$_SESSION['var1']="中華人民共和國";
           $sn = session_id();
           $url="下一頁";
           echo $url;
       ?>
            -------------------------------------------------- -------------------------------------------------- ------
       ----------------------------------------- -------------------------------------------------- ------------------------
                  session_id($_GET['s']);
   ;
           echo "傳遞的session變數var1的值為:".$_SESSION['var1'];
       ?> 
   -------------------------------------------------- ------------------------------------------------
       途徑3舉例說明:
       ----------------------------------------- -------------------------------------------------- ------------------------
       login.html
        
        
        
       Login 2">
        
        
       請登入: 
   用戶名:
 
       口令:
 
        
        
        
        
   -------------------------------------------------- ----------------------------------------
       ------- -------------------------------------------------- -------------------------------------------------- --------
       mylogin1.php
              $name=$_POST['name'];
     $name=$_POST['name'];
  8; >       if(!$name || !$pass) {
           echo "使用者名稱或密碼為空,請重新登錄";
           die();
       }
       if (!($name=="laigw" && $pass=="1234") {
           echo "用戶名或密碼不正確,請重新登入";
           die();
           die();
      
       //註冊使用者
       ob_start();
       session_start();
  約id();
       $fp =fopen("D:tmpphpsid.txt","w+");
       fwrite($fp,$psid);
       fclose($fp);
       fclose($fp);
       fclose($fp);
       fclose($fp);
 🎜>       echo "已登入
";
       echo "下一頁";
       ?>
       ------------------------------------------- -------------------------------------------------- ----------------------
       ------------------------- -------------------------------------------------- ----------------------------------------
       mylogin2.php
              $fp=fopen("D:tmpphpsid.txt","r");
       $sid=fread($fp,1024);       session_start();
       if(isset($_SESSION['user']) && $   
       } else {
           //成功登入相關作業
           echo "未登入,無權利存取"; ei2004.blog.163. com/blog/login.html">登入後瀏覽";
           die();
       }
   -------------------------------------------------- -------------------------------------------------- --
       也請關閉Cookie測試,使用者名稱:laigw;密碼:1234;這是透過檔案儲存Session ID的,檔案是:D:/tmp/phpsid.txt,請依照自己的系統決定檔案名稱或路徑。
       總結一下,上面的方法有一個共同點,就是在前一頁取得Session ID,然後想辦法傳遞到下一頁,在下一頁的session_start();代碼之前加代碼Session ID(傳過來的Session ID)。

以上就介紹了 Cookie禁用了,Session還能用嗎? ,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南

CakePHP 專案配置 CakePHP 專案配置 Sep 10, 2024 pm 05:25 PM

CakePHP 專案配置

CakePHP 日期和時間 CakePHP 日期和時間 Sep 10, 2024 pm 05:27 PM

CakePHP 日期和時間

CakePHP 檔案上傳 CakePHP 檔案上傳 Sep 10, 2024 pm 05:27 PM

CakePHP 檔案上傳

CakePHP 路由 CakePHP 路由 Sep 10, 2024 pm 05:25 PM

CakePHP 路由

討論 CakePHP 討論 CakePHP Sep 10, 2024 pm 05:28 PM

討論 CakePHP

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發

CakePHP 快速指南 CakePHP 快速指南 Sep 10, 2024 pm 05:27 PM

CakePHP 快速指南

See all articles