2012-10-11 5 views
1

나는 이것을 고치고 있습니다. PHP를 처음 사용했습니다쿠키가 여러 페이지에 걸쳐 유지되지 않습니다 PHP

저는 단순히 querystring 변수를 쿠키 안에 넣고 사이트의 모든 페이지에서 사용할 수있게하려고합니다. 현재 상황은 querystring이 있고 다른 페이지로 이동하면 쿠키가 사라질 때만 쿠키를 설정한다는 것입니다.

내 모든 PHP 페이지 상단에이 코드를 가지고 :

<?php 

$expire=time()+60*60*24*30; 

if (isset($_GET['v'])) { 
$thev = $_GET['v']; 

if (!isset($_COOKIE["ckv"])) { 
setcookie("ckv", $_GET['v'], $expire); 
} 
} else if (isset($_COOKIE["ckv"])) { 
$thev = $_COOKIE["ckv"]; 
} else { 
$thev = 'nothing'; 
} 
?> 
  1. PAGE1 작품! (쿠키를 보여줍니다)
  2. page1 쿼리 스트링 WORKS! (쿠키를 보여줍니다)
  3. page2 BROKEN. (쿠키가 사라졌습니다.)

**이 순서대로 클릭했습니다. 그래서 3 페이지는 쿠키를 표시해야한다

, 당신이 내가 위의 대답에 동의

+1

page2가 다른 디렉토리 또는 하위 도메인에 있습니까? –

답변

1

감사 $ _COOKIE의 대신에 세션을 사용하여 조사. 그들은 내가 이것을 볼 수있는 세 가지 답이있을 수 있습니다 훨씬 더 유연하고 매우 안전한 쿠키

http://us3.php.net/manual/en/features.sessions.php

+0

하지만 ... 그들은 다른 일을합니다. 상태 비 저장 서버 팜용 응용 프로그램을 빌드하면 PHP 세션은 거의 쓸모가 없습니다 (쿠키와 데이터베이스로 백업해야합니다). 페이지로드시 서버에서 Javascript로 데이터를 공유하려는 경우 세션에서이를 쉽게 수행 할 수 없습니다 (쿠키가 가능함).쿠키보다 짧은 세션을 원할 수 있습니다 (단, 서버에서 세션 길이를 변경할 수있는 권한이 없습니다). 서버가 다시 시작되면 세션도 손실됩니다 (쿠키 + 데이터베이스로 백업해야 함). 다른 것들, 세션이 그들의 자리를 가지고, 쿠키가 그들의 장소가 있습니다. – Robbie

0

보다.

대부분의 경우 페이지 1과 페이지 2가 다른 디렉토리에 있습니다. 기본적으로 쿠키는 현재 디렉토리 (브라우저에 지정된대로 - 포함/아파치 리디렉션 등을 무시함)에 저장되며 해당 디렉토리와 그 아래에만 적용됩니다. 당신이

/dir1/page1 
/dir2/page2 

이있는 경우 다음 페이지 1 쿠키는 기본값으로 경로 (see documentation)를 지정하여 2 페이지

당신은이 문제를 얻을 수 있습니다에서 사용할 수 없습니다. 여기에서는 쿠키가 적용될 디렉토리를 선언합니다. 가장 일반적으로이를 '/'(루트)로 설정하면 응용 프로그램의 모든 페이지에 적용됩니다. 이제


몇 개는 : 당신이 다음거야, '/'의 경로를 포함하고 실행하는 코드를 수정하면 당신은 이미 '/ DIR1 /'에 쿠키를 가지고로서

실제로 '/'와 '/ dir1 /'에 각각 하나씩 두 개의 쿠키가 있습니다. 귀하의 페이지 1은 당신이 먼저 삭제하지 않는 한 '/ dir1 /'쿠키를 얻습니다. 또한 '/ dir2 /'에 빈 쿠키가 없는지 확인하십시오. 즉, 코드에 공백이 아닌 "아무것도"얻지 않습니다. 즉, 쿠키가 있지만 값이 비어 있음을 의미합니다. 하위 디렉토리에 쿠키가 있으면 많은 좌절이 생길 수 있습니다.

캐싱 (값을 캐싱하지 않아야 함)과 다른 도메인 (다른 도메인에서 쿠키를 공유 할 수 없으며 하위 도메인에서 공유하려는 경우 루트 도메인 지정 - 문서 참조).

관련 문제