国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > .NET > 正文

如何把PHP站點用戶登錄會話傳遞到ASP.NET站點

2024-07-10 13:06:11
字體:
來源:轉載
供稿:網友

目的:
用戶從php制作的web站點登錄后,有些時候要去瀏覽另一個由asp.net制作的站點,但還要用當前的登錄信息。

我們在php登錄時,把登錄信息等存儲在了$_session中,由于php的session是自己實現的,所以無法傳遞給asp.net。

那么如何讓asp.net站點知道用戶已經登錄了呢,從而把php登錄會話傳遞給asp.net呢,而且拿到登錄的一些參數呢?

當然我們可以直接傳遞參數,或者把session存儲在數據庫中,但是前者不安全,我希望這些事情在后臺完成,后者則有點麻煩。

那么有沒有什么簡單的辦法呢?

 

解決:
基本原理是:

    asp.net頁面在page_load方法中,

    首先查看請求本站點的request的cookies,找到phpsessid,
        這就是標示當前訪問者的sessionid;

 

    然后我們構造httpwebrequest,以這個phpsessionid向php站點下的checklogin.php頁面請求,


        看當前這個sessionid所代表的會話是否已經登錄。

    如果登錄成功,那么該頁面將返回我們規定的一些數值,由asp.net鑒別即可。


 

更多詳情:
第一步,得到當前請求的web頁面的絕對路徑:

string strabsolutepath;

            strabsolutepath = request.url.absoluteuri;

            int npos = strabsolutepath.lastindexof("/");

            int nremovelength = strabsolutepath.length - npos;

            string struripath = strabsolutepath.remove(npos, nremovelength);

第二步,遍歷cookie,尋找phpsessionid:

string strphpsessionid = "";

            for(int i=0;i < request.cookies.count;i++)

            {

                if("phpsessid" == request.cookies[i].name)

                {

                    strphpsessionid = "phpsessid=" + request.cookies[i].value;

                }

            }

第三步,通過validatelogin模擬httpwebrequest帶著phpsessionid請求驗證頁面,看當前用戶是否登錄:

validatelogin vllogin = new validatelogin(

                    struripath,

                    "/../mainsite/checklogin.php",

                    strphpsessionid);

                m_strlogininfo = vllogin.logininfo.trim();

我們給system.web.httpwebrequest 對象創建一個新的cookiecontainer,把phpsessionid放進去,如下所示:

cookiecontainer cookiecon = new cookiecontainer();

                hwrrequest.cookiecontainer = cookiecon;

                hwrrequest.cookiecontainer.setcookies(new uri(strvalidatepageurl),

                    m_strphpsessionid);

m_strphpsessionid是這樣構造的:

phpsessid=.....

這樣,asp.net發起的請求被主站點的php頁面接收到之后,就會認為是同一個登錄會話。

validatelogin.cs的代碼如附錄所示:
using system;

using system.web;

using system.io;

using system.net;

using system.text;

 

namespace linktone.mysite.components

{

    /// <summary>

    /// validatelogin 的摘要說明:由于要集成到php制作的mainsite站點中,

    /// 首要就是登錄統一。

    /// 那么我們用這類來保證瀏覽本站點的用戶已經先登錄了mainsite站點;

    /// 我們的基本原理是:

    /// 首先查看請求本站點的request的cookies,找到phpsessid,這就是標示當前訪問者的sessionid;

    /// 然后我們構造httprequest,以這個phpsessionid向mainsite站點下的checklogin.php請求,

    /// 看當前這個sessionid所代表的會話是否已經登錄;

    /// 如果登錄成功,那么該頁面將返回一個字符串:“blablabla”.

    /// </summary>

    ///

    /// 作者:鄭昀@掌上靈通 20050221

    public class validatelogin

    {

        /// 要請求的驗證頁面的相對路徑

        private string m_strvalidatepagerelateurl;

        /// 從請求端傳遞過來的phpsessionid

        private string m_strphpsessionid;

 

        protected string m_strlasterror;

 

        private webresponse m_webresponse;

       

        public string validatepage

        {

            get { return m_strvalidatepagerelateurl; }

            set { m_strvalidatepagerelateurl = value; }

        }

 

        public string loginoperatorid

        {

            get { return m_strloginoperatorid; }

            set { m_strloginoperatorid = value; }

        }

 

        /// <summary>

        ///

        /// </summary>

        /// <param name="absoluteuri">當前web頁面請求的絕對url</param>

        /// <param name="validatepage">要請求的驗證頁面的相對路徑</param>

        public validatelogin(string absoluteuri,

                             string validatepage,

                             string phpsessionid)

        {

            m_strvalidatepagerelateurl = validatepage;

            m_strphpsessionid = phpsessionid;

 

            /// 請求頁面

            requestgetoperatorid(absoluteuri);

        }

 

        ~validatelogin()

        {

            m_webresponse.close();

        }

 

        public void requestgetoperatorid(string strabsoluteuri)

        {

            try

            {

                string path;

                path = strabsoluteuri;

               

                /// 構建要訪問的絕對路徑

                string strvalidatepageurl = path + m_strvalidatepagerelateurl;

                /// 構建請求的httpwebrequest對象,并設置好session

                httpwebrequest hwrrequest = (httpwebrequest)webrequest.create(

                    strvalidatepageurl);

                hwrrequest.method = "get";

                hwrrequest.proxy = system.net.webproxy.getdefaultproxy();

                // allow auto redirects from redirect headers

                hwrrequest.allowautoredirect=true;

                // 30 second timeout for request

                hwrrequest.timeout=(int) new timespan(0,0,60).totalmilliseconds;

                // give the crawler a name.

                hwrrequest.useragent = "mozilla/4.0 (compatible; msie 6.0; windows nt 5.1)";

       

                hwrrequest.contenttype = "application/x-www-form-urlencoded";

                cookiecontainer cookiecon = new cookiecontainer();

                hwrrequest.cookiecontainer = cookiecon;

                hwrrequest.cookiecontainer.setcookies(new uri(strvalidatepageurl),

                    m_strphpsessionid);

   

                hwrrequest.keepalive = false;

                hwrrequest.protocolversion = httpversion.version10;

               

                /// webrequest 實例上的 getresponse 方法

                /// 將來自客戶端應用程序的請求發送到在 uri 中標識的服務器。

                m_webresponse = hwrrequest.getresponse();

                /// getresponse 和 endgetresponse 方法返回一個 webresponse 實例,

                /// 該實例提供對服務器返回的數據的訪問。

                /// 因為此數據由 getresponsestream 方法作為流提供給發出請求的應用程序,

                /// 所以它可以在應用程序中的使用數據流的任何地方使用。

                streamreader sr = new streamreader(

                    m_webresponse.getresponsestream(),

                    encoding.getencoding("gb2312"));

                string svalidate = sr.readtoend();

                sr.close();

 

                /// 檢驗驗證登陸的頁面是否確認登陸了,否則直接引導到login.php頁面

                /// 調用者負責重定向

                /// m_strloginoperatorid = blabla;

               

            }

            catch (exception eexcep)

            {

                m_strlasterror = eexcep.message;

            }

 

            return;

 

        }

 

    }

}
 

中國最大的web開發資源網站及技術社區,
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汕尾市| 房产| 辛集市| 沈丘县| 保定市| 健康| 郎溪县| 黎川县| 高淳县| 凤阳县| 凤凰县| 上林县| 霍山县| 新沂市| 彰化县| 巴中市| 青海省| 长顺县| 东山县| 伽师县| 合作市| 安新县| 巧家县| 芦山县| 桃江县| 江津市| 张家口市| 习水县| 抚顺县| 庆云县| 自贡市| 玉环县| 桃源县| 贺兰县| 邛崃市| 饶阳县| 呼玛县| 平顶山市| 平湖市| 盐山县| 车险|