文档章节

【已解决】PHP项目需求:在现有网站中每个页面增加一个get参数

Eller
 Eller
发布于 2015/12/04 14:41
字数 610
阅读 589
收藏 2

需求:在这个现有的网站之中每个页面增加一个get参数,保证用户分享出去链接均有推广用户id。

想法一:给类似tp框架之中U函数(构造URL链接函数)增加一个get参数,半分钟搞定需求。

现实:这个网站没有这个构造链接函数,页面于页面之间衔接的链接都是写死在模板里的。

想法二:在模板中把那些链接地址都替换掉,正则一下,最多也就几分钟解决掉。

现实:由于使用的是smarty模板引擎,替换起来比较麻烦。很多链接不幸被替换错误,导致网站无法正常工作。手写的话 保不准以后增加页面还得做重复工作。

想法三:用htaccess重写URL,给每个页面附加参数。

现实:因为附加的是用户id,htaccess无法直接获取用户id。

 

终于打消奇葩的思想之后,开始认真地考虑需求。

解决方案如下:

  1. 使用js替换掉每个页面之中所有的链接,并附加用户id。

  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);

 

以上仅是本人总结的一些解决方案,当然并非是最优的。如果大家有更好的解决方案可以分享出来!

© 著作权归作者所有

Eller
粉丝 19
博文 59
码字总数 51082
作品 0
深圳
程序员
私信 提问
加载中

评论(0)

网页抓取/收据抽取/信息提取软件工具包MetaSeeker怎样做垂直搜索和商品比价服务

假设要做一个书籍搜索和比价服务,使用网页抓取/数据抽取/信息提取软件工具包MetaSeeker做出来的服务与其他类似的网站有什么不同呢? 确实有很大的不同,主要原因是MetaSeeker工具包中的Sli...

Fuller
2009/08/25
936
0
使用URL Rewrite 实现网站伪静态

对于以JSP为表现层开发的动态网站来说,用户访问的URL通常有如下形式: 大部分搜索引擎都会优先考虑收录静态的HTML页面,而不是这种动态的*.jsp 、.php 页面。但实际上绝大部分网站都是动态的...

学习中的技术小白
前天
0
0
PHP正则替换HTML标签

现有如下字符串: 想将其中含有vertical-align属性的span标签都换成xyz,即: 求大神指教用PHP正则如何实现啊??? 另外,我自己在测试的时候,发现正则表达式'\s*'(我想匹配多个空格)似乎...

Xiaopeng
2013/03/27
3.1K
2
CMS

1.CMS 是什么? 内容管理系统(Content Management System,简称CMS)是指在一个合作模式下,用于管理工作流程的一套制度。该系统可应用于手工操作中,也可以应用到电脑或网络里。作为一种中...

一杯千岁醉
2017/05/22
0
0
禅道项目管理软件 6.2.stable 版本发布!

禅道项目管理软件 6.2.stable 版本于8月27日正式发布。 该版本主要是细节方面的调整。 调整并优化了测试流程,修复Bug,提高系统安全性。 使用lazarus重构windows一键安装包的控制面板。 一、...

炒蚕豆吃蹦豆
2014/08/28
3.2K
8

没有更多内容

加载失败,请刷新页面

加载更多

根据二维数组中某个字段来排序

1,一种取巧的办法 <?phpfunction sortByField(array $arr, string $field, int $asc = 1) { if (count($arr) <= 1 || empty($field)) {return $arr;}$arr = array_colu......

vinci321
36分钟前
16
0
Linux系统安装RabbitMQ

安装环境 系统:CentOS7,RabbitMQ:3.6.15,Erlang:20.1 RabbitMQ与Erlang对应关系:https://www.rabbitmq.com/which-erlang.html RabbitMQ下载: http://www.rabbitmq.com/releases/rabbi......

那个猩猩很亮
45分钟前
15
0
wms、wmts、wfs等地图服务区别

OGC OGC 全称是开放地理空间信息联盟(Open Geospatial Consortium),是一个非盈利的国际标准组织,它制定了数据和服务的一系列标准,GIS厂商按照这个标准进行开发可保证空间数据的互操作,致力...

东东笔记
52分钟前
17
0
使用jQuery将表单数据转换为JavaScript对象 - Convert form data to JavaScript object with jQuery

问题: How do I convert all elements of my form to a JavaScript object? 如何将表单的所有元素转换为JavaScript对象? I'd like to have some way of automatically building a JavaScri......

技术盛宴
55分钟前
20
0
Java8处理集合的优雅姿势之Stream

前言 在Java中,集合和数组是我们经常会用到的数据结构,需要经常对他们做增、删、改、查、聚合、统计、过滤等操作。相比之下,关系型数据库中也同样有这些操作,但是在Java 8之前,集合和数...

文文1
58分钟前
16
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部