2014-10-01 2 views
0

Пожалуйста, скажите мне, как я мог бы сделать функцию запустить PHP только один раз в этой ситуации (в CodeIgniter):Как заставить PHP работать только после запуска в первый раз?

Когда ссылка на страницу нажатии она идет href="http://foo.com/func/id/". На основе сегмента URL-адреса id сегмент func выполняет функцию, которая решает, где перенаправить пользователя, который нажал ссылку.

То, что я хотел бы достичь это:

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

В принципе, каждый клик по той же ссылке после первого щелчка вызовет else случай. Ссылки могут иметь любые идентификаторы или классы, если необходимо.

Я хочу, чтобы этот код оставался верным для нажатых ссылок, по крайней мере, до тех пор, пока текущая страница не будет закрыта, но, возможно, удлините ее до сеанса браузера или даже на основе таймера, если это возможно - возможно, сеанс PHP ..?

+2

Возможно, сеанс php. Или, может быть, некоторые javascript реагируют onclick и меняют ссылку на добавление параметра? – Aneri

+0

Если вы пытаетесь заставить его отвечать только на первый клик на всех пользователей, тогда единственный полезный способ его хранения - через базу данных. Если вы хотите, чтобы он был в первый раз нажат только на текущий пользователь, тогда переменная $ _SESSION будет работать нормально. – LS11

+0

Ну, вы должны знать, что хотите -> определить, что означает «первый»: Первый раз КОГДА-ЛИБО КОТОРЫЙ нажимает ссылку, первый раз на человека кто-то нажимает на ссылку. Затем вы должны определить, что такое человек: идентифицировано по идентификатору, по сеансу, по идентификатору пользователя (по регистрации), по времени, по файлу cookie .... это действительно зависит от того, что вы понимаете как «первый» – Zim84

ответ

0

Вы хотите сохранить состояние (по-прежнему, HTTP является апатридом).

Вы должны сохранить серверный сервер флага, например запись базы данных, файл или даже семафор в памяти.

Я не понял, является ли желаемое поведение «крестным» или одиночным пользователем.

0

Возможно,

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

Хотя это я бы использовал 'isset ('linkClicked', $ _ SESSION) AND $ _SESSION ['linkClicked']' вместо использования '@' глушителя. Это только я. –

+0

Это не сработает, если он отслеживает несколько ссылок на своем сайте. – Solrac

+0

@SolracRagnarockradio Я согласен. Мой фрагмент кода - это заставить Алекса начать и исследовать дальше, основываясь на его требовании. – sudipto

0

PHP имеет 2 временных хранилищ вне из коробки для вас:

$_COOKIE 
$_SESSION 

В зависимости от того, сколько данных вы будете хранить это может быть полезно/бесполезно вы. Если данные, которые вы будете хранить, слишком велики (e, ссылки на 200 ссылок), вам может быть лучше хранить их в файле и связывать их через идентификатор сеанса пользователя или таблицу 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

+0

Сессия будет хранить данные на обработчике сессии PHP, который является файлом в вашей ОС. Если вы хотите сохранить данные в файле cookie, вы должны использовать глобальный $ _COOKIE, но безопаснее использовать $ _SESSION, так как проще изменить клиент cookie. – Solrac

Смежные вопросы