• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • PHP5:session會話的使用和分析(二)

    發表于:2007-04-22來源:作者:點擊數: 標簽:分析sessionPHP5會話注冊
    注冊SESSION變量: PHP5使用$_SESSION[‘xxx’]=xxx注冊SESSION全局變量。和GET,POST,COOKIE的使用方法相似。 注意:session_reGISter(),session_unregister ,session_is_registered在php5下不再使用,除非在php.ini里把register_globle設為on,不過出于

    注冊SESSION變量:

      PHP5使用$_SESSION[‘xxx’]=xxx注冊SESSION全局變量。和GET,POST,COOKIE的使用方法相似。

      注意:session_reGISter(),session_unregister ,session_is_registered在php5下不再使用,除非在php.ini里把register_globle設為on,不過出于安全考慮,強烈建議關閉register_globle。HTTP_SESSION_VARS也不提倡使用了,官方建議用$_SESSION代替之。例如:
      Page1.php

    <?php
    Session_start(); //使用SESSION前必須調用該函數。
    $_SESSION[‘name’]=”我是黑旋風李逵!”; //注冊一個SESSION變量
    $_SESSION[‘passwd’]=”mynameislikui”;
    $_SESSION[‘time’]=time();
    echo '<br /><a href="page2.php">通過COOKIE傳遞SESSION</a>'; //如果客戶端支持cookie,可通過該鏈接傳遞session到下一頁。
    echo '<br /><a href="page2.php?' . SID . '">通過URL傳遞SESSION</a>';//客戶端不支持cookie時,使用該辦法傳遞session.
    ?>

      Page2.php

    <?php
    session_start();
    echo $_SESSION['name']; //
    echo $_SESSION['passwd']; //
    echo date('Y m d H:i:s', $_SESSION['time']);
    echo '<br /><a href="page1.php">返回山一頁</a>';
    ?>

      有兩種方法傳遞一個會話 ID:

      cookie
      URL 參數

      會話模塊支持這兩種方法。cookie 更優化,但由于不總是可用,也提供替代的方法。第二種方法直接將會話 ID 嵌入到 URL 中間去。
    PHP 可以透明地轉換連接。除非是使用 PHP 4.2 或更新版本,需要手工在編譯 PHP 時激活。在 Unix 下,用 --enable-trans-sid 配置選項。如果此配置選項和運行時選項 session.use_trans_sid 都被激活(修改php.ini),相對 URI 將被自動修改為包含會話 ID。

      ● session_id

      session_id() 用于設定或取得當前session_id。php5中既可以使用session_id(),也可以通過附加在url上的SID取得當前會話的session_id和session_name。

      如果session_id()有具體指定值的話,將取代當前的session_id值。使用該函數前必須啟動會話:session_start();
    當我們使用session cookies時,如果指定了一個session_id()值,每次啟動session_start()都會往客戶端發送一個cookie值。不論當前session_id是否與指定值相等。

      session_id()如果沒有指定值,則返回當前session_id();當前會話沒有啟動的話,則返回空字符串。

      ● 檢查session是否存在?

      在以往的php版本中通常使用session_is_register()檢查session是否存在,如果您使用$_SESSION[‘XXX’]=XXX來注冊會話變量,則session_is_register()函數不再起作用。你可以使用isset($_SESSION[‘xxx’])來替代。

      ● 更改session_id session_regenerate_id() 更改成功則返回true,失敗則返回false。

      使用該函數可以為當前session更改session_id,但不改變當前session的其他信息。例如:

    <?php
    session_start();
    $old_sessionid = session_id();
    session_regenerate_id();
    $new_sessionid = session_id();
    echo "原始 SessionID: $old_sessionid<br />";
    echo "新的 SessionID: $new_sessionid<br />";
    echo"<pre>";
    print_r($_SESSION);
    echo"</pre>";
    ?>

      ● session_name() 返回當前session的name或改變當前session的name。如果要改變當前session的name,必須在session_start()之前調用該函數。注意:session_name不能只由數字組成,它至少包含一個字母。否則會在每時每刻都生成一個新的session id.

       session改名示例:

    <?php
    $previous_name = session_name("WebsiteID");
    echo "新的session名為: $previous_name<br />";
    ?>

      ● 如何刪除session?

      1、unset ($_SESSION['xxx']) 刪除單個session,unset($_SESSION['xxx']) 用來unregister一個已注冊的session變量。其作用和session_unregister()相同。session_unregister()在PHP5中不再使用,可將之打入冷宮。

      unset($_SESSION) 此函數千萬不可使用,它會將全局變量$_SESSION銷毀,而且還沒有可行的辦法將其恢復。用戶也不再可以注冊$_SESSION變量。

      2、$_SESSION=array() 刪除多個session

      3、session_destroy()結束當前的會話,并清空會話中的所有資源。。該函數不會unset(釋放)和當前session相關的全局變量(globalvariables),也不會刪除客戶端的session cookie.PHP默認的session是基于cookie的,如果要刪除cookie的話,必須借助setcookie()函數。

      返回值:布爾值。

      功能說明:這個函數結束當前的session,此函數沒有參數,且返回值均為true

      session_unset() 如果使用了$_SESSION,則該函數不再起作用。由于PHP5必定要使用$_SESSION,所以此函數可以打入冷宮了。

      下面是PHP官方關于刪除session的案例:

    <?php
    // 初始化session.
    session_start();
    /*** 刪除所有的session變量..也可用unset($_SESSION[xxx])逐個刪除。****/
    $_SESSION = array();
    /***刪除sessin id.由于session默認是基于cookie的,所以使用setcookie刪除包含session id的cookie.***/
    if (isset($_COOKIE[session_name()])) {
    setcookie(session_name(), '', time()-42000, '/');
    }
    // 最后徹底銷毀session.
    session_destroy();
    ?>


      由此我們可以得出刪除Session的步驟:

     ?、賡ession_start()

     ?、?_SESSION=array()/unset($_SESSION['xxx'])

     ?、踫ession_destroy()

      ● SESSION安全:

      會話模塊不能保證存放在會話中的信息只能被創建該會話的用戶看到。根據其存放的數據,還需要采取更多措施來主動保護會話的完整性。

      評估會話中攜帶的數據并實施附加保護措施通常要付出代價,降低用戶的方便程度。例如,如果要保護用戶免于受簡單的社交策略侵害(注:指在 URL 中顯示的會話 ID 會被別人在電腦屏幕上看到,或被別的網站通過 HTTP Referer 得到等),則應該啟用 session.use_only_cookies。此情形下,客戶端必須無條件啟用 cookie,否則會話就不工作。

     有幾種途徑會將現有的會話 ID 泄露給第三方。泄露出的會話 ID 使第三方能夠訪問所有與指定 ID 相關聯的資源。第一,URL 攜帶會話 ID。如果連接到外部站點,包含有會話 ID 的 URL 可能會被存在外部站點的 Referer 日志中。第二,較主動的攻擊者可能會偵聽網段的數據包。如果未加密,會話 ID 會以明文方式在網絡中流過。對此的解決方式是在服務器上實施 SSL 并強制用戶使用。

      默認情況下,所有與特定會話相關的數據都被存儲在由 INI 選項 session.save_path 指定的目錄下的一個文件中。對每個會話會建立一個文件(不論是否有數據與該會話相關)。這是由于每打開一個會話即建立一個文件,不論是否有數據寫入到該文件中。注意由于和文件系統協同工作的限制,此行為有個副作用,有可能造成用戶定制的會話處理器(例如用數據庫)丟失了未存儲數據的會話。
    上面介紹函數下文將會用到,但還有一些有關session的函數也介紹一下:
      session_encode

      函數功能:sesssion信息編碼

      函數原型:string session_encode(void);

      返回值:字符串

      功能說明:返回的字符串中包含全局變量中各變量的名稱與值,形式如:a|s:12:"it is a test\";c|s:4:"lala"; a是變量名 s:12代表變量a的值"it is a test的長度是12 變量間用分號”;”分隔。

      session_decode

      函數功能:sesssion信息解碼

      函數原型:boolean session_decode (string data)

      返回值:布爾值

      功能說明:這個函數可將session信息解碼,成功則返回邏輯值true

      Php5不再使用session_id,而是把它變成一個常量SID,并保存在cookie中。如果客戶端禁用了cookie,php會自動通過url自動傳動傳遞SID,其條件是設置php.ini中的session.use_trans_sid = 1。此時即使客戶端即使禁用了cookie也沒關系了。

      用 strip_tags() 來輸出 SID 以避免 XSS 相關的攻擊。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>