2014-10-01 190 views
0

请告诉我,如何让PHP函数只能在此设置下运行一次(在CodeIgniter中):如何让PHP函数只在第一次触发后运行?

当单击页面上的链接时,它将转到href="http://foo.com/func/id/"。根据网址段idfunc段运行一个函数,该函数决定将点击链接的用户重定向到哪里。

我想实现的是:

function func($id) 
{ 
if ("first time link($id) is clicked by unique user") { 
// Redirect based on $id 
} else { 
// Redirect to homepage 
} } 

基本上,第一次点击后在同一链路上每次点击都会触发else情况。 如果需要,链接可以有任何ID或类。

我想这个代码忠于至少直到当前页面被关闭被点击的链接,但基于可能的话计时器它可能延长到浏览器会话,甚至 - 也许是一个PHP会话..?

+2

也许一个php会话。或者,也许一些javascript反应onclick并更改链接添加参数? – Aneri 2014-10-01 08:09:38

+0

如果您试图让它只响应所有用户的第一次点击,那么唯一健康的方法就是通过数据库进行存储。如果你希望它是第一次被当前用户点击,那么一个$ _SESSION变量将会很好。 – LS11 2014-10-01 08:11:45

+0

那么你必须知道你想要什么 - >定义“第一”是什么意思:第一次有人点击链接,每个人第一次点击链接。然后,你必须定义什么一个人:由id标识,通过会议,通过用户ID(在注册),按时间,按饼干....这真的取决于你明白什么是“第一” – Zim84 2014-10-01 08:13:30

回答

0

你需要的是保持状态(静止,HTTP是无状态的)。

你必须保持一个标志服务器端,如数据库记录,文件,甚至在内存中的信号。

如果所需的行为是“交叉”或单个用户我不明白。

0

也许,

function func($id) 
{ 
    if (@$_SESSION['linkClicked']) { 
     // Redirect to homepage 
    } else { 
     $_SESSION['linkClicked'] = true; 
     // Redirect based on $id 
    } 
} 
+0

虽然这会工作,我会使用'isset('linkClicked',$ _ SESSION)和$ _SESSION ['linkClicked']'而不是使用'@'消音器。虽然这只是我。 – 2014-10-01 08:15:37

+0

如果他正在跟踪他的网站上的多个链接,这将不起作用。 – Solrac 2014-10-01 08:31:15

+0

@SolracRagnarockradio我同意。我的代码片段是让Alex开始并根据他的要求进一步探索。 – sudipto 2014-10-01 08:34:51

0

PHP有2个临时储存出的现成的你:

$_COOKIE 
$_SESSION 

取决于你将存储多少数据,这些可能是有用/没用您。如果您要存储的数据太大(例如,200个链接引用),那么最好将这些数据存储在文件中,并通过用户会话ID或SQL表格链接它们。

PHP本身没有告诉谁在点击什么,因为它是服务器端编程的方式。所以请考虑这个:

function func($Link_id){ 

    if (in_array($Link_id, $_SESSION['my_links'])){ 
    $_SESSION['my_links'][]=$Link_id; 
    // Redirect to homepage 
    } else { 
    // Redirect based on $id 
    } 

} 
+0

在这种情况下,会话是否也会存储Cookie?谢谢。 – Alex 2014-10-01 09:11:36

+0

会话将数据存储在PHP的会话处理程序中,该处理程序是操作系统中的文件。 如果要将数据保存在cookie上,则必须使用全局$ _COOKIE,但使用$ _SESSION更安全,因为修改cookie客户端比较容易。 – Solrac 2014-10-01 14:06:47