PHP面試常問問題

PHP變量類型:

Boolean 布爾類型

Integer 整型

Float 浮點型

String 字符串

Array 數組

Object 對象

Resource 資源類型

NULL

Callback / Callable 類型

session跨域問題:

這時候就涉及到session跨域問題,因為域名不是父子關系,所以必須要實現完全跨域,想到了以下三個解決辦法:

1.URL傳參:測試模塊訪問的時候,地址www.xyz.com后把主域名的session通過參數的形式傳遞過去,如:www.xyz.com;jsessionid=7D4DED1F2DB5BC53961EFED18BCE7E30

2.SSO單點登錄

3.利用jsonp的跨域特性,通過ajax進行session傳遞

第一種方案考慮URL傳參數不美觀以及URL需要分享給別人的時候就沒法獲取到session,所以放棄

第二種SSO單點登錄方案應該在三種方案中最優(yōu)的,因為系統(tǒng)架構問題,所以也放棄

目前采用的是第三種方案:

1.把網站主域名的頭部和測試模塊的頭部分開,在測試模塊的頭部加入以下js代碼:

(使用測試模塊域名www.xyz.com進行網站訪問的時候,利用jsonp跨域特性去主域名www.abc.com獲取session信息,然后把session信息設置到測試模塊域名中)

varuser = '${sessionScope.username}';//獲取session信息

//先跨域去取主域名登錄的session信息? ? $.getJSON(

"www.abc.com/user/getname?callback=?",function(data){

? ? ? ? if(data !=null&& data != ""){? ? ? ? ? //把取到的session數據設置到當前域名的session信息中

$.getJSON(

"www.xyz.com/user/setname?data="+data+"&callback=?",function(data){

? ? ? ? ? ? ? ? if((user ==null|| user == "") && data !=null&& data != ""){

? ? ? ? ? ? ? ? ? ? window.location.reload();//需要重新加載一下當前頁面,不然頭部不會顯示session信息

? ? ? ? ? ? ? ? }

? ? ? ? ? ? });

? ? ? ? }else{

//退出登錄時清除session信息

if(user !=null&& user != ""){

? ? ? ? ? ? ? ? $.getJSON("www.xyz.com/user/setname?data=&callback=?",function(data){

if(data !=null&& data != "" && data == 'ok'){

window.location.reload();

}

});

}

}

});

2.后臺實現代碼:

@RequestMapping(value="getname")

? ? @ResponseBody

? ? public String getName(HttpServletRequest request,HttpServletResponse response){

? ? ? ? //獲取回調函數名String callback = request.getParameter("callback");

? ? ? ? String callRes = "";

? ? ? ? try{

String username = (String) request.getSession().getAttribute("username");

if(StringUtils.isBlank(username)){

return callback + "()";

}

callRes = callback + "(" + JsonUtils.toJsonString(username) + ")";

? ? ? ? } catch (Exception e) {

? ? ? ? ? ? callRes = callback + "()";

? ? ? ? ? ? logger.error(e);

? ? ? ? }

? ? ? ? return callRes;

? ? }



? ? @RequestMapping(value="setname")

? ? @ResponseBody

? ? public String setName(HttpServletRequest request,HttpServletResponse response){

? ? ? ? String callRes = "";

? ? ? ? //獲取回調函數名String callback = request.getParameter("callback");

? ? ? ? String data = request.getParameter("data");

? ? ? ? if(StringUtils.isBlank(data)){

? ? ? ? ? ? request.getSession().invalidate();

? ? ? ? ? ? returncallback + "("+JsonUtils.toJsonString("ok")+")";? ? ? ? }

    try {? ? ? ? ? ? request.getSession().setAttribute("username", data);

? ? ? ? ? ? callRes = callback + "("+JsonUtils.toJsonString("ok")+")";

? ? ? ? } catch (Exception e) {

? ? ? ? ? ? callRes = callback + "()";

? ? ? ? ? ? request.getSession().invalidate();

? ? ? ? ? ? logger.error(e);

? ? ? ? }

? ? ? ? return callRes;

? ? }

獲取session數據時是否進行數據加密,這個根據自己的需要,最好是把數據加密

session已經實現了共享,這種方案的缺點就是訪問測試模塊的時候,需要和服務器交互很多次,性能上肯定不好

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 1.認識php php是服務端嵌入到HTML中的腳本語言。php的功能包括但不限于: 收集表單數據 生成動態(tài)網頁 ...
    楠哥哥_0b86閱讀 942評論 3 1
  • 一、php可以做什么 php是一種可以在服務器端運行的編程語言,可以運行在Web服務器端。 php是一門后臺編程語...
    空谷悠閱讀 3,280評論 4 97
  • 類型 PHP一共有如下類型: Boolean 布爾類型 integer 整型 float 浮點型,也稱作 doub...
    波哥教你學閱讀 1,979評論 2 9
  • 簡介 PHP,Hypertext Preprocessor,又稱為超文本預處理器,開發(fā)PHP會需要一定的開發(fā)環(huán)境,...
    郭子web閱讀 334評論 2 1
  • 如何從月薪3000到3萬 很多人進入社會以前,以為大城市的收入很高,但往往剛進去某個公司,你的工資才只是三四千,心...
    我是范老師閱讀 409評論 0 0

友情鏈接更多精彩內容