2011-01-04 6 views
4

인사말,PHP session_regenerate_id 및 Blackberry 브라우저

로그인 시스템에서 작업 중이며 인증하는 Blackberry 브라우저가 작동하지 않습니다. 그것은 그들이 PHP의 session_regenerate_id() 문제가있는 것, 누군가가 대안을 제안 할 수 있습니까? 다음은 인증 및 로그인 스크립트입니다.

업데이트 일반적으로 세션이 작동하지 않는 것으로 보입니다. session_regenerate_id()를 호출하여 작동하는지 확인하고 매번 $_SESSION['MD_SESS_ID']이 비어있는 것처럼 리디렉션됩니다. 정말로 여기에 붙어서 어떤 아이디어라도 감사 할 것입니다. Blackberry Bold 9650을 사용하여 기기의 쿠키가 활성화됩니다. iPod Touch 및 PC의 모든 브라우저에서 작동합니다.

로그인

<?php 
session_start(); 
include $_SERVER['DOCUMENT_ROOT'] . '/includes/pdo_conn.inc.php'; 
//Function to sanitize values received from the form. Prevents SQL injection 
function clean($str) { 
$str = @trim($str); 
if(get_magic_quotes_gpc()) { 
    $str = stripslashes($str); 
} 
return $str; 
} 
$username = clean($_POST['username']); 
$password = clean($_POST['password']); 

if ($username != "" && $password != "") { 
$getUser = $db->prepare("SELECT id, username, password, salt FROM uc_dev WHERE username = ? LIMIT 1"); 
$getUser->execute(array($username)); 
$userDetails = $getUser->fetch(); 
$dbPW = $userDetails['password']; 
$dbSalt = $userDetails['salt']; 
$hashedPassword = hash('sha512', $dbSalt . $password); 
if ($hashedPassword == $dbPW) { 
    //Login Successful 
    session_regenerate_id(); 
    $_SESSION['MD_SESS_ID'] = $userDetails['id']; 
    header('Location: http://somewhere.com'); 
    session_write_close(); 
} else { 
    header('Location: http://www.somewhere.com'); 
    exit(); 
} 
} else { 
header('Location: http://somewhere.com'); 
exit(); 
} 
?> 

인증

<?php 
//Start the session 
session_start(); 
//Verify that MEMBER ID session is present 
if(!isset($_SESSION['MD_SESS_ID']) || (trim($_SESSION['MD_SESS_ID']) == '')) { 
    $_SESSION = array(); 
    // Note: This will destroy the session, and not just the session data! 
    if (ini_get("session.use_cookies")) { 
    $params = session_get_cookie_params(); 
    setcookie(session_name(), '', time() - 42000, 
    $params["path"], $params["domain"], 
    $params["secure"], $params["httponly"] 
    ); 
    } 
    // Finally, destroy the session. 
    session_destroy(); 
    header("Location: http://somewhere.com"); 
    exit(); 
} 
?> 

답변

2

전에 동안, 나는 몇 가지 블랙 베리 개발을하고 있었는데, 브라우저가 같은 여러 쿠키를 처리 할 수 ​​있다는 것을 발견 이름. 그들이 이것을 아직 고칠 지 확신하지 못합니다. 당신이 두 번 이상 Set-Cookie 헤더를 발송하는 경우

그래서 같은 이름을 각 시간을 사용하여, (setcookie, session_start, 또는 session_regenerate_id 사용),이 문제의 원인이 될 수 있습니다.

개체 나 배열에서 출력해야하는 쿠키를 추적하여 요청 마지막 순간에만 브라우저로 보낼 수 있습니다. 이 방법으로 요청의 중간에 값을 변경해야하는 경우 다른 쿠키 헤더를 보내지 않고 배열의 값을 덮어 쓸 수 있습니다.

This page도 도움이 될 수 있습니다 - PHP의 session_regenerate_id 페이지에서 링크 된 사용자.

+0

공개되지 않은 사이트의 중간 수준 보안 기능에 대한 액세스를 제어하기위한 것입니다. 로그인 성공시 하나의 쿠키를 만든 다음 인증 스크립트에서 해당 쿠키를 확인할 수 있습니까? 세션을 사용하는 대신. 아마도 임의의 쿠키 이름일까요? (솔직히 말해서 나는 쿠키에 대해 많이 알지 못한다 - 일반적으로 $ _SESSION 함수를 사용한다 – NightMICU

+0

최소한 위장 할 수없는 방식으로 쿠키를 저장해야한다. 아마도 사용자 특정 데이터, 쿠키를 확인하고 타임 스탬프가 너무 오래되었는지 확인하십시오. –

+0

쿠키의 값을 사용자 이름의 해시 된 버전으로 만들었습니다. 성공적인 매칭시에만 생성되며 세션이 끝나면 만료됩니다. 매력처럼 작동합니다. – NightMICU

관련 문제