2016-07-24 2 views
0

Я правильно использую сессию? Или делать это так плохо? Есть ли лучший способ использования сеанса для защиты веб-приложенийЯ использую сессию правильно?

это мой PHP код

$conn = new PDO("mysql:host=$host;dbname=$dbname",$username, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING)); 
    $stmt = $conn->prepare("CALL sp_login(?,?)"); 
    $stmt->bindParam(1, $_username, PDO::PARAM_STR, 30); 
    $stmt->bindParam(2, $_password, PDO::PARAM_STR, 30); 
    $stmt->execute(); 
    $row = $stmt->fetch(PDO::FETCH_ASSOC); 
    if($row){ 
     $_SESSION['Login_username'] = $_username; 
     header("location: index.php"); 
     exit; 
    } 

и это код для проверки сессий

if(isset($_SESSION['Login_username'])) { 

    return true; 
} 
else{ 
    header("location: login.php"); 
     exit; 
} 

Я где-то читал, что это хорошая идея сохранить сеанс в базе данных.

Я собираюсь сохранить его в базе данных. Как я собираюсь это сделать? После успешного входа в систему я хочу вставить сеанс в базу данных?

И как использовать сохраненную сессию в моей базе данных?

Некоторые говорят, что его лучше this, а некоторые говорят, что его лучше that. И теперь я смущен.

+2

Я думаю, вы не защищены от SQL-инъекции. –

+0

что? im не защищен от SQL-инъекции? как? пожалуйста, дополните. или указать код. где возможно внедрение sql. спасибо – askquestionzero

+0

@ PřemyslŠťastný Я не вижу SQL-инъекцию здесь. Можете ли вы уточнить? – ceejayoz

ответ

0

Только причина, по которой вам нужно будет хранить сеансы в базе данных, - это если у вас несколько серверов и межсайтовый скрипт входа в систему или что-то подобное.

+0

Я думал, что это безопасно. Спасибо. поэтому для обеспечения безопасности моего веб-приложения можно интегрировать код. в примере. я прав? и как я могу убедиться, что приложение безопасно в sql-инъекции. Я думал, что я использовал подготовленное заявление? – askquestionzero

+0

Не прочитал сообщение полностью. Отредактировано мое оригинальное сообщение. –

1

PHP сохраняет сеансы в файлы в каталоге, который вы можете найти с помощью функции session-save-path (или настройки, указанной на этой странице).

Вы используете сеанс правильно, учитывая, что вы всегда звоните session_start() перед использованием $_SESSION.

Просто подумайте о $_SESSION как обычный массив, который автоматически заполняется для каждого пользователя с помощью PHP. Практически все может быть применено к этому, например, unset, isset ...

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

Как упоминал ответ Джей С, вы сохраняете сеанс в базе данных, когда у вас есть распределенное приложение, работающее на нескольких узлах. Хотя это можно обрабатывать и с использованием общих файловых систем (просто обменивайтесь указанным путем на всех узлах).

В любом случае, чтобы узнать, как реализовать собственный обработчик сеанса, см. PHP documentations.

Чтобы узнать обработчики по умолчанию, предоставленные вашим php, найдите «Registered save handlers» на выходе phpinfo().

Если вы только слышали, что сохранение сессии в базе данных - это лучшая идея, вам она, вероятно, не нужна. Поверьте мне, сохранение сеанса в базе данных вызывает много проблем, с которыми вам не пришлось столкнуться при использовании файловой системы. Базы данных сложнее обрабатывать под нагрузкой, а сеансы в базе данных могут легко переносить базу данных под нагрузкой. Только не делайте этого, если вы не уверены, что хотите этого.

-2

Вы задали слишком много разных вопросов сразу.

Я правильно использую сеанс? есть.

это так плохо? №.

Есть ли лучший способ использования сеанса для защиты веб-приложения? нет действительно.

Я собираюсь сохранить его в базе данных. Как я собираюсь это сделать? однако вы хотите.

После успешного входа в систему я хочу вставить сеанс в базу данных?

И как использовать сохраненную сессию в моей базе данных? Вы используете его точно так же, как и вы, с $ _SESSION и session_start().

Если вы хотите хранить сеансы в базе данных, посмотрите на «session_set_save_handler» и «SessionHandlerInterface» в документации PHP. Это диктует PHP, как загружаются и сохраняются данные сеанса, они не имеют никакого отношения к тому, как используется $ _SESSION var - то же самое, независимо от того, как/где хранятся данные сеанса.