手機端登入**的問題是乙個困擾我很久的問題。總是會有那麼一些使用者告訴我,他的手機不能登入**了。要想能有效地解決手機登入的問題,一種方案就 是盡可 能多地模擬出使用者的手機端環境出來,針對這些具體的環境對**進行測試和調整。另一種方案就是盡可能地讓**擺脫對於客戶端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在瀏覽器中看的時候,鏈結還是沒有變化。怎麼回事呢?原來伺服器端在檢測到瀏覽器端支援cookie的情況下,是不會開啟url傳遞sessionid的。ini_set('session.use_trans_sid',1);
?>
hello
不妨試試禁用瀏覽器的cookie。會發現效果依舊。這是怎麼回事呢?
<?phpini_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通過get_redirect_url函式,我們就能將重定向的**也支援傳遞sessionid了。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);
?>
太好了,又解決了一種情況。
五、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...