몇 달 동안 사이트에서 고유 세션을 추적하는 데 문제없이 다음 코드를 사용했지만 최근에 알려지지 않은 이유로 작동을 멈췄습니다. 별도의 파일에서 코드를 테스트하면 원래 의도 한대로 작동합니다.세션이 예상대로 작동하지 않습니다.
코드는 세션이 존재하는지 확인하고, 존재하지 않으면 세션을 만들고이를 TRUE로 설정합니다. 그런 다음 두 번째 검사를 수행하여 세션이 TRUE인지 여부를 확인한 다음 FALSE로 변경되고 데이터베이스에 저장된 조회가 변경됩니다. 이것은 세션 당 한 번 발생합니다. 이를 달성하기
코드는 다음과 같습니다
<?php
session_start();
// If the session DOES NOT EXIST, make it and set it to TRUE.
if(!isset($_SESSION['new_visit']))
{
$_SESSION['new_visit'] = true;
}
// If the session is TRUE, make it false.
if($_SESSION['new_visit'] == true)
{
$_SESSION['unique_session_id'] = hash("sha512", uniqid("", true) . uniqid("", true) . uniqid("", true));
$_SESSION['new_visit'] = false;
}
echo $_SESSION['unique_session_id'];
이 코드를 실행하면 예상대로, 아무리 내가 페이지를 새로 고침 횟수, 출력이 변경되지 않습니다. 각 if
문은 한 번만 실행되므로 'unique_session_id'
변수는 항상 변경되지 않습니다. 그러나 제 제작 코드에는이 정확한 코드가 들어 있지만 갑자기 작동을 멈췄습니다. 내 생산 코드는 이것이다 :
<?php
if(empty($article_data))
{
$no_article = true;
}
$options = $this->db->get_options();
$server_options = $this->db->server_options();
// Check site status (on/off).
if($options['status'] == "off")
{
echo $options['offline_message'];
exit(); // Equal to die.
}
if($server_options['force_ssl'] == "on")
{
if($_SERVER["HTTPS"] != "on")
{
header("HTTP/1.1 301 Moved Permanently");
exit(header("Location: https://" . $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"]));
}
}
$this->db->store_hit();
$this->db->store_ip();
//----------------------------------------------------------------------------------------------------------
// Store visits (individual sessions). Visits are not unique hits. Visits are the number of unique sessions,
// so a single person may accumulate many visits (sessions), i.e., returning users.
//----------------------------------------------------------------------------------------------------------
// If the session DOES NOT EXIST, make it and set it to TRUE.
if(!isset($_SESSION['new_visit']))
{
$_SESSION['new_visit'] = true;
}
// If the session is TRUE, make it false.
if($_SESSION['new_visit'] == true)
{
$this->db->store_visit();
$_SESSION['unique_session_id'] = hash("sha512", uniqid("", true) . uniqid("", true) . uniqid("", true));
$_SESSION['new_visit'] = false;
}
?><!DOCTYPE html>
<html>
...
</html>
이 코드는 동일하다 볼 수 있습니다, 아직 때마다 나는 논리가 영향을받지 않는 경우 불가능하다 페이지 unique_session_id
변수 변화를 새로 고칠. 내 유일한 결론은 페이지 새로 고침 사이에 세션이 삭제되거나 손실된다는 것입니다.
주 :
- 내가 처음부터 작성한 MVC 패턴을 사용하고 있습니다.
session_start()
이 다른 PHP 행보다 먼저 호출되고 있습니다.index.php
입니다.session_start()
을 파일의 여러 위치로 이동 시키려고 시도했습니다. 은 세션 생성 직전이었습니다. 이것은 아무것도하지 않습니다.session_write_close()
을 사용해 보았지만 작동하지 않습니다.
2 논리 명령문은 페이지 새로 고침이 몇 번 발생했는지에 관계없이 세션 당 한 번만 실행해야하며 2-3 개월 동안이 방법으로 작업해야합니다. 한 페이지 씩 새로 고침 한 후 갑자기 실행되기 시작한 이유는 무엇입니까? 세션이 바뀔 때마다 논리가 TRUE로 평가되는 세션 바운즈가 어떻게됩니까?
편집은
세션 문제는 이제 웹 호스트에서 새의 php.ini 파일을 요청하여 수정되었습니다.
PHP 설정의 최근 변경 사항을 확인 했습니까? –
@JoshAustin 아니요. 확인해야 할 설정이 무엇 인지도 알지 못합니다. 문제의 필요한 설정을 확인하기 위해'phpinfo() '를 사용할 수 있다고 가정하고 있습니까? 기록을 위해 나는 어떤 설정도 직접 변경하지 않았습니다. – George88
꽤 많은 세션 [configuration] (http://www.php.net/manual/en/session.configuration.php) 설정이 있습니다. 현재 설정과 비교해야합니다. –