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

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

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    實現跨域名Cookie

    發布: 2007-7-14 19:53 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 14次 | 進入軟件測試論壇討論

    領測軟件測試網   Cookie真是一個偉大的發明,它允許web開發者保留他們的用戶的登錄狀態。然而,當你的站點或網絡
    有一個以上的域名時就會出現問題了。


      在Cookie規范上說,一個cookie只能用于一個域名,不能夠發給其它的域名。因此,如果在瀏覽器中對
    一個域名設置了一個cookie,這個cookie對于其它的域名將無效。如果你想讓你的用戶從你的站點中的其中
    一個進行登錄,同時也可以在其它域名上進行登錄,這可真是一個大難題。


      我的解決方案將使用下面的一般框架:

    一個預置的腳本將用來接受通過GET或COOKIE方式傳遞過來的sessionid號。它將比COOKIE優先選擇GET
    變量。所以,無論何時需要引用交叉的域名時,我們把sessionid做為一個URL參數進行發送。
    修改Apache配置,用來實現重寫所有的交叉域名的cookie。這樣做的原因一會兒就會清楚了。
    在任何時候出現一個交叉域名引用時使用變量。
    第一步:創建預置腳本
      將下面的代碼加到預置腳本中(或出現在所有腳本之前的函數中)。

    <?php

    /* 支持交叉域名cookie... */

    // 如果GET變量已經設置了,并且它與cookie變量不同
    //則使用get變量(更新cookie)
    global $HTTP_COOKIE_VARS, $HTTP_GET_VARS;
    if (isset($sessionid) && isset($HTTP_GET_VARS['sessionid']) && ($HTTP_COOKIE_VARS['sessionid'] != $HTTP_GET_VARS['sessionid'])) {
    SetCookie('sessionid', $HTTP_GET_VARS['sessionid'], 0, '/', '');
    $HTTP_COOKIE_VARS['sessionid'] = $HTTP_GET_VARS['sessionid'];
    $sessionid = $HTTP_GET_VARS['sessionid'];
    }

    ?>

      一旦這個代碼運行之后,一個全局的'sessionid'變量將可以用于腳本。它將保存著用戶的cookie中的
    sessionid值,或者是通過GET請求發來的sessionid值。


    第二步:為所有的交叉域名引用使用變量
      創建一個全局的配置文件,用于存放可以進行切換的域名的基本引用形式。例如,如果我們擁有
    domain1.com和domain2.com,則如下設置:

    <?php

    $domains['domain1'] = "http://www.domain1.com/-$sessionid-";
    $domains['domain2'] = "http://www.domain2.com/-$sessionid-";

    ?>

      現在,如果在代碼中如下做:

    <?php

    echo "Click <a href=\"", $domains['domain2'], "/contact/?email=yes\">here</a> to contact us.";

    ?>
      你將產生如下的輸出:

    Click <a href="http://www.domain2.com/-66543afe6543asdf6asd-/contact/?email=yes\">here</a>
    to contact us.

      在這里sessionid已經被插入到URL中去了。

      在這個地方,你可能會想"這樣可能會在web服務器上打開名為橫線,sessionid,橫線的子目錄?!?!?"。
    然而,下面的步驟將提供一個必需的戲法,以便讓它能夠使用!


    第三步:配置Apache
      現在,剩下的步驟就是配置apache來重寫這個URL:

    http://www.domain2.com/-66543afe6543asdf6asd-/contact/
      變成這樣:

    http://www.domain2.com/contact/?sessionid=66543afe6543asdf6asd
      并且這種url:

    http://www.domain2.com/-66543afe6543asdf6asd-/contact/?email=yes
      變成這樣:

    http://www.domain2.com/contact/?email=yes&sessionid=66543afe6543asdf6asd
      為了實現它,簡單地配置兩個虛擬服務器,作為domain1和domain2,如下操作:

    <VirtualHost ipaddress>
    DocumentRoot /usr/local/www/domain1
    ServerName www.domain1.com
    RewriteEngine on
    RewriteRule ^/-(.*)-(.*\?.*)$ $2&sessionid=$1 [L,R,QSA]
    RewriteRule ^/-(.*)-(.*)$ $2?sessionid=$1 [L,R,QSA]
    </VirtualHost>

    <VirtualHost ipaddress>
    DocumentRoot /usr/local/www/domain2
    ServerName www.domain2.com
    RewriteEngine on
    RewriteRule ^/-(.*)-(.*\?.*)$ $2&sessionid=$1 [L,R,QSA]
    RewriteRule ^/-(.*)-(.*)$ $2?sessionid=$1 [L,R,QSA]
    </VirtualHost>

      這些重寫的規則實現了上面兩個URL重寫的要求。

    結論
      通過使用變量結合與apache的重寫功能,交叉域名cookie可以以一種簡單的方式實現。想要維護這樣的
    系統,無論什么時候鏈接交叉域名,在使用域名變量之外,什么也不用作了!在域名內部的鏈接不需要進行
    修改,因為cookie會工作正常。

      如果你有興趣看一下在生產網絡中實際運作中的系統,請參觀http://www.familyhealth.com.au/。在
    一些交叉域名鏈接上移動你的鼠標,并且看一下當你點擊后它們是如何被重寫的。

      也許,使用這個技術唯一的問題就是無法刪除在用戶瀏覽器中的全部域名下的cookie。

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品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>