構建不依賴於cookie的手機端使用者登入機制

2022-09-07 06:03:14 字數 3756 閱讀 9990

手機端登入**的問題是乙個困擾我很久的問題。總是會有那麼一些使用者告訴我,他的手機不能登入**了。要想能有效地解決手機登入的問題,一種方案就 是盡可 能多地模擬出使用者的手機端環境出來,針對這些具體的環境對**進行測試和調整。另一種方案就是盡可能地讓**擺脫對於客戶端cookie環境的依賴,建立 更加健壯的**。

隨著資訊科技的發展,手機本身的硬體裝置越來越先進,功能也越來越全面,對於cookie的支援顯然不成問題。不過,總還是有一部分人群在使用著比 較低端 的手機。做為開發者來說,要能最大範圍地滿足不同手機使用者的需求,就不得不考慮對於不支援cookie的手機的支援。否則,你可能不得不一遍又一遍地對用 戶說,我們的**支援帶有cookie功能的手機,甚至還得對著使用者解釋半天什麼是cookie。

那麼,現在就來看看我們需要為建立不依賴於cookie的手機端使用者登入機制需要做哪些準備。

一、了解php對於session機制的支援

php.ini中關於session的幾個有用的字段:

session.use_trans_sid通過開啟這個引數,即可啟用通過url引數傳遞sessionid的支援。預設值為0,不開啟。

url_rewriter.tags 哪些地方需要用來傳遞sessionid。預設值 為」a=href,area=href,frame=src,input=src,form=fakeentry」,表示在標籤a=href表示對於標籤 a的href屬性,要將sessionid附加上去。

session.use_cookies預設的值是「1」,代表sessionid使用cookie來傳遞,反之就是使用url引數來傳遞。如果 session.use_trans_sid=1,那麼啟用該選項,在客戶端支援cookie的情況下,仍然使用cookie傳遞sessionid,在 檢測到客戶端不支援cookie的情況下,則會使用url引數傳遞sessionid。

session.name這個就是sessionid儲存的變數名稱,預設為phpsessid

session.cookie_lifetime這個代表sessionid在客戶端cookie儲存的時間,預設是0,代表瀏覽器一關閉sessionid就作廢。

session.gc_maxlifetime這個是session資料在伺服器端儲存的時間,如果超過這個時間,那麼session資料就自動刪除。

session.s**e_pathsession的儲存路徑。預設為/tmp。如果在路徑前加2;則表示cookie的儲存深度為2。比如如果session.s**a_path=2; /tmp/session,那麼sess_005c685e3ec4e0cf6b667245225299c8這個session就會儲存在/tmp /session/0/0/這個目錄下。

二、基本使用方法

新建乙個session.php檔案,**為:

hello

最後輸出來的時候鏈結位址無疑還是hello.php,那麼,我們來增加幾行**,讓它變得能支援傳遞sessionid。

<?php 

ini_set('session.use_trans_sid',1);

?>

hello

在瀏覽器中看的時候,鏈結還是沒有變化。怎麼回事呢?原來伺服器端在檢測到瀏覽器端支援cookie的情況下,是不會開啟url傳遞sessionid的。

不妨試試禁用瀏覽器的cookie。會發現效果依舊。這是怎麼回事呢?

<?php 

ini_set('session.use_trans_sid',1);

session_start();

?>

hello重新整理一下介面,發現生成的源**已經變成如下的**了。

hello
那麼恭喜,我們的目標已經基本完成了。

在前面的**中,我們都是直接在**中使用ini_set函式對php.ini的字段進行設定,這樣做有什麼好處呢?因為在實際的伺服器環境中,可 能會執行多個**,修改php.ini中的配置會直接影響到其他**的執行,而是用在**中設定則能在最大程度上削弱這種影響。

三、如何確保各種標籤傳遞sessionid

在前面的例子中,我們已經能讓a標籤的href屬性正確地附加上sessionid了。不過,在實際的開發中,可能會有更加複雜的情況。比如,你可能會用到form,也有可能用到iframe,甚至即使在使用的時候也需要傳遞sessionid。那麼來看下面的**:

<?php 

ini_set('session.use_trans_sid',1);

session_start();

?>

hello

重新整理介面後,輸出的**為:

hello

輸出來的結果如下:

hello

很顯然,iframe和img也能順利地傳遞sessionid了。

到此為止,我們已經能解決大部分的問題了。

四、重定向情況下的傳遞

通過第二部分,我們已經能把頁面輸出的sessionid傳遞解決掉了,但這還不是全部。比如,我們經常會通過設定header來進行頁面的重定向。

header(『location: /hello.php』);
在這種情況下,很顯然,php並不會去處理。那麼,我們還是需要自己手動來進行調整了。**如下:

<?php 

ini_set('session.use_trans_sid',1);

$tags = ini_get('url_rewriter.tags');

ini_set('url_rewriter.tags',$tags.',iframe=src,img=src');

session_start();

function get_redirect_url($url) else

$url .= $tag.$sessionkey.'='.$sessionid;

return $url;

}$rurl = get_redirect_url('/hello.php');

header('location: '.$rurl);

?>

通過get_redirect_url函式,我們就能將重定向的**也支援傳遞sessionid了。

太好了,又解決了一種情況。

五、wap1.x的特殊情況

不過,在wap1.x下使用wml開發的時候,還有一些特殊的情況。比如,url中的&需要轉化為&,否則瀏覽器解釋的時候就會報錯。因此,對於頁面標籤和重定向的情況,我們都需要針對wap1.x的頁面做特殊處理。

重定向的情況很好處理,將第四部分的get_redirect_url函式中的$tag=』&』,在wap1.x的環境中替換 為$tag=』&』即可。不過對於介面標籤的處理,則需要我們引入一條新的配置項——arg_separator.output。這個配 置項用來指定當在url中加入sessionid引數時,使用什麼樣的連字元,預設值是&。那麼,在已知處於wap1.x環境時,加入如下的語句 即可逢凶化吉了:

ini_set('arg_separator.output','&');
好了,到此為止,我們已經基本上能解決掉wap開發中使用url傳遞sessionid的大部分情況了。看似內容比較多,實際上就介紹了html標 籤中url如何傳遞sessionid和使用重定向時如何傳遞sessionid兩種情況,並對wap1.x環境下的情況做了一些特殊處理,最終確保不依 賴於cookie的使用者登入機制得以實現的過程。希望這些總結的內容對於wap開發者能帶來一定的幫助。

構建不依賴於cookie的手機端使用者登入機制(三)

引 三 如何確保各種標籤傳遞sessionid 在前面的例子中,我們已經能讓a標籤的href屬性正確地附加上sessionid了。不過,在實際的開發中,可能會有更加複雜的情況。比如,你可能會用到form,也有可能用到iframe,甚至即使在使用的時候也需要傳遞sessionid。那麼來看下面的 in...

git 不依賴於原來分支建立新分支

不知道大家使用git作為 管理工具的機會多不多,現在公司就是使用git作為 管理工具 git真的是不錯的 管理工具,而且越使用越覺得方便 git裡面很多功能,今天記錄其中乙個功能 在專案中修改bug的時候,經常遇到正在修復乙個bug,然後又要求你去解決另外乙個bug的問題。那麼怎麼儲存之前的修改呢?...

不依賴於整合開發平台搭建簡易的C編譯環境

整合的ide公司沒買,有時需要自己寫個小的c demo測試程式,手動編譯 鏈結 執行,就很麻煩。setp1 新建指令碼檔案a.bat用於開啟vs自帶的手動編譯視窗 comspec k c program files x86 microsoft visual studio 14.0 vc vcvars...