【已解決】PHP項目需求:在現有網站中每一個頁面增長一個get參數

需求:在這個現有的網站之中每一個頁面增長一個get參數,保證用戶分享出去連接均有推廣用戶id。php

想法一:給相似tp框架之中U函數(構造URL連接函數)增長一個get參數,半分鐘搞定需求。前端

現實:這個網站沒有這個構造連接函數,頁面於頁面之間銜接的連接都是寫死在模板裏的。cookie

想法二:在模板中把那些連接地址都替換掉,正則一下,最多也就幾分鐘解決掉。框架

現實:因爲使用的是smarty模板引擎,替換起來比較麻煩。不少連接不幸被替換錯誤,致使網站沒法正常工做。手寫的話 保不許之後增長頁面還得作重複工做。函數

想法三:用htaccess重寫URL,給每一個頁面附加參數。性能

現實:由於附加的是用戶id,htaccess沒法直接獲取用戶id。網站

 

終於打消奇葩的思想以後,開始認真地考慮需求。this

解決方案以下:url

  1. 使用js替換掉每一個頁面之中全部的連接,並附加用戶id。spa

  2. 使用js給每一個a連接增長事件,跳轉前附加用戶id。

由以上兩種方案中,相比性能而言,天然是後者比較好。

 

用戶登陸以後:***.php

/* 設置cookie信息 */
	setcookie('user_id',$_SESSION['user_id']);// 用戶id存儲在cookie裏,便於前端訪問。

公共js文件 ***.js

// 追加js
//獲取cookie #s
function getCookie(cname) {
    var name = cname + "=";
    var ca = document.cookie.split(';');
    for(var i=0; i<ca.length; i++) {
        var c = ca[i];
        while (c.charAt(0)==' ') c = c.substring(1);
        if (c.indexOf(name) != -1) return c.substring(name.length, c.length);
    }
    return "";
}

// 遍歷a標籤添加事件 重寫url
// u 爲網站推薦用戶id
// user_id 爲登錄後存儲在cookie裏用戶id
var aLink=document.getElementsByTagName("a");
for(i=0;i<aLink.length;i++){
	aLink[i].onclick=function(){
		var u = getCookie('user_id');
		if(parseInt(getCookie('user_id'))<=0 || u==""){
			return;
		}
		if(this.href.indexOf('u=') > -1){
			return;
		}
		if(this.href.indexOf('?')>0){
			this.href = this.href +"&u="+u;
		}else{
			this.href = this.href +"?u="+u;
		}
	}
 }

用戶註銷登陸以後 **.php

setcookie("user_id","",time() - 3600);

 

以上僅是本人總結的一些解決方案,固然並不是是最優的。若是你們有更好的解決方案能夠分享出來!

相關文章
相關標籤/搜索