мобильные браузеры не могут войти на мой сайт - PullRequest
4 голосов
/ 06 апреля 2010

Я протестировал свой сайт на 2 моделях телефонов, используя «универсальный» браузер, поставляемый с телефоном, но, к сожалению, каждый раз, когда я пытался войти в систему, он возвращал меня на мою страницу индекса.

вот мой логин

    <form name='login' method='POST' action='authentication.php'>
<table border=0 cellpadding=2>
<tr><td>Login:</td><td></td></tr>
<tr><td>E-mail: </td><td><input type=text name='email' id='email' size=20 maxlength="200"></td></tr>
<tr><td>Password: </td><td><input type=password name='password' id='password' size=20 maxlength="100"></td></tr>
<tr><td></td><td><input type=submit value='Login'></td></tr>
</table></form>

и вот файл authentication.php (фрагмент)

$currentUserEmail = $_POST["email"];
$currentUserPwd = md5($_POST["password"]);
$stmt = $dbi->prepare("select status from users where email=? and pwd=?");
$stmt->bind_param('ss', $currentUserEmail,$currentUserPwd); 
mysqli_stmt_execute($stmt);
mysqli_stmt_store_result($stmt);
$isUserAvailable = mysqli_stmt_num_rows($stmt);
$stmt->bind_result($getUserStatus);
$stmt->execute() or die (mysqli_error());
$stmt->store_result();
$stmt->fetch();
$stmt->close();

if($isUserAvailable > 0){
    if ($getUserStatus == "PENDING") {
        $userIsLoggedIn = "NO";
        $registeredUser = "NO"; 
        unset($userIsLoggedIn);
        setcookie("currentMobileUserName", "", time()-3600);
        setcookie("currentMobileUserEmail", "", time()-3600);
        setcookie("currentMobileSessionID", "", time()-3600);
        setcookie("currentMobileUID", "", time()-3600);
        header('Location: '.$config['MOBILE_URL'].'/index.php?error=2&email='.$currentUserEmail);
    }elseif (($getUserStatus == "ACTIVE") || ($getUserStatus == "active")){ //means successfully logged in

        //set the cookie

        setcookie("currentMobileUserName", $currentUserName, $expire);
        setcookie("currentMobileUserEmail", $currentUserEmail, $expire);
        setcookie("currentMobileSessionID", $getGeneratedMobileUSID, $expire);
        setcookie("currentMobileUID", $currentUID, $expire);
        $userIsLoggedIn = "YES";
        $registeredUser = "YES";


        $result = $stmt->execute() or die (mysqli_error($dbi));

        if ($caller == "indexLoginForm"){
            header('Location: '.$config['MOBILE_URL'].'/home.php');
        }else{

            header('Location: '.$config['MOBILE_URL'].'/home.php');

        }


    }

}else{
    $userIsLoggedIn = "NO";
    $registeredUser = "NO"; 
    unset($userIsLoggedIn);
    setcookie("currentMobileUserName", "", time()-3600);
    setcookie("currentMobileUserEmail", "", time()-3600);
    setcookie("currentMobileSessionID", "", time()-3600);
    setcookie("currentMobileUID", "", time()-3600);
    header('Location: '.$config['MOBILE_URL'].'/index.php?error=1');

}

Единственный способ получить доступ к своему мобильному сайту - использовать Opera Mini. Просто к сведению, оба «универсальных браузера», которые я тестировал на своем сайте, поддерживают файлы cookie (по крайней мере, так сказано в настройках браузера).

спасибо

Ответы [ 2 ]

2 голосов
/ 06 апреля 2010

Некоторые мобильные браузеры (на ум приходят ежевики) не обрабатывают файлы cookie, отправленные ни в чем, кроме ответа 2xx - вы отвечаете перенаправлением 302.

Попробуйте это:

setcookie("currentMobileUserName", $currentUserName, $expire);
setcookie("currentMobileUserEmail", $currentUserEmail, $expire);
setcookie("currentMobileSessionID", $getGeneratedMobileUSID, $expire);
setcookie("currentMobileUID", $currentUID, $expire);
$userIsLoggedIn = "YES";
$registeredUser = "YES";
... // some WML/HTML markup...
print "You are logged in. Click <a href='" 
       . $config['MOBILE_URL']. "/home.php'>here</a> to continue.";

Кроме того, некоторые старые устройства не любят хранить более одного cookie-файла на сайт - решить этот файл немного сложнее, если предположить, что вам нужен постоянный идентификатор, чтобы пользователю не приходилось входить в систему (генерировать собственный идентификатор сеанса, зашифровывающий токен, который идентифицирует пользователя со временем и устанавливает время истечения в будущем - если не найдено ни одного идентификатора сеанса, расшифровывается, чтобы получить значение Запомнить меня).

С

0 голосов
/ 06 апреля 2010

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

Вместо этого следует попробовать передатьидентификатор сеанса в URL, чтобы ваш сайт работал во всех мобильных браузерах.Это можно сделать, установив session.use_trans_sid в true в вашей конфигурации PHP, например, ini_set('session.use_trans_sid', true);

W3C имеет полезную информацию о файлах cookie в своих рекомендациях для мобильных веб *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...