Я искал много, много тем в Сети, обсуждая переменные сеанса и как их получить из Javacript через Ajax. Однако, хотя я был в состоянии сделать это, это не полностью решает мою проблему.
Задача
Чтобы обеспечить онлайн-управление запасами в Интернете.
Ограничения
Образцы кода
index.php
<?php session_start(); ?> <html> ... <div id="newAtvDialog" title="Input information on the new ATV"> <form id="newAtvAjaxForm" action="addNewAtv.php" method="post"> ... </form> </div> <div id="section"> <$php echo file_get_contents("inventory-sections.html"); ?> </div> ... </html>
authenticate.php
<?php require_once "data/data_access.php"; $userName = ""; $password = ""; if (isset($_REQUEST["userName"])) $userName = $_REQUEST["userName"]; if (isset($_REQUEST["password"])) $password = $_REQUEST["password"]; $isAuthentic = isAuthenticUser($userName, $password); $_SESSION["isAuthentic"] = $isAuthentic; echo $isAuthentic; // I try to use the below-written function where ever I need to show/hide elements. function isCurrentUserAuthenticated() { return isset($_SESSION["isAuthentic"]) && $_SESSION["isAuthentic"]; } ?>
project.js
$(document).ready(function() { $("#newAtvDialog").dialog({ autoOpen: false, closeOnEscape: true, modal: true, width: 1000 }); $("#newAtvAjaxForm").ajaxForm(function(data) { $("#newAtvDialog").dialog("close"); $("#section").load("sectionhandler.php?section=atv&type=-1&make=0&year=0&category=0", function(event) { $("button").button(); }); }); });
atv.php
<div id="newAtvButton"> <!-- This DIV is to be hidden when not authenticated --> <button id="addNewAtvButton">Add New ATV</div> </div> <div id="criterion"> ... </div> <div id="atv-inventory"> <?php include ('atv-inventory-list.php'); ?> </div>
АТВ-инвентаризации list.php
<?php $type = -1; $make = 0; $year = 0; $category = 0; if (isset($_REQUEST["type"])) $type = $_REQUEST["type"]; ... $atvs = getAllAtvs($type, $make, $year, $category); foreach ($atvs as $value=>$atv): ?> <div class="inventory-item"> <img src="<?php echo utf8_decode($atv->getPathToImage())"> <div class="item-title"> ... </div> <div id="commands"> <!-- This is the way I have tried so far, and it doesn't seem to work properly. --> <button id="removeAtvButton" class="<?php echo isCurrentUserAuthenticated() ? 'show' : 'hide'; ?>"> Remove ATV </button> </div> </div>
sectionhandler.php
$section = ""; if (isset($_REQUEST["section"])) $section = $_REQUEST["section"]; $type = -1; $make = 0; $year = 0; $category = 0; // getting values from $_REQUEST[] $activatedSection = ""; switch($section) { case "atv": $activatedSection = "atv.php"; ... } $file = $url.raw_url_encore($activatedSection); include $file;
Дополнительные мысли
Я думал о настройке переменной логического сеанса, которая истекает через 20 минут бездействия от пользователя, заставляя его снова войти в систему.
Я знаю, что не буду использовать пароли, хранящиеся в базе данных. Это первый шаг аутентификации на этом сайте, который я скоро поставлю в Интернете, так как клиент собирается запросить доставку в ближайшее время. Зашифрованные пароли станут следующим шагом. Но сначала мне нужно, чтобы функция show / hide работала правильно.
Я также думал о куках, и, будучи совершенно новым для веб-разработки, я не совсем уверен, какой будет лучший подход. Насколько мне известно, самое простое в лучшем случае, если это подразумевает минимальную безопасность. В конце концов, это не сайт НАСА! 😉
Спасибо всем за ваш вклад! знак равно
Это идея, но вы можете работать над ней;
actionURL – это php-файл, в котором вы можете проверить, вошел ли пользователь в действительный сеанс.
Функция ajaxSession возвращает true или false, если пользователь регистрируется.
Затем вы можете вызывать эту функцию каждые X секунд / минут для управления, если сеанс все еще продолжается.
window.setInterval(function(){ // call your function here if(ajaxSession(actionUrl)){ //return true, user logged, append/show protected divs. }else{ //return false, remove/hide protected divs and ask user to log. } }, 5000); //every 5 seconds.
Функция ajaxSession:
function ajaxSession(actionUrl) { var sessionOK= false; $.ajax({ async: false, url: actionUrl, success: function(msg) { // check the return call from the php file. if(msg== 'OK'){ sessionOK = true; }else{ sessionOk = false; } }}); return sessionOK; }
РЕДАКТИРОВАТЬ
Я добавлю пример кода для actionUrl , который вернется, если сеанс isset или нет функции ajaxSession :
<?php session_start(); // $_SESSION['reg'] is true when the user is logged in. if($_SESSION['reg'] == true){ echo 'OK'; }else{ echo 'NO'; } ?>
Не забудьте проверить в функции ajaxSession результат вызова Ajax. Если это ОК, то sessionOk = true, если нет, sessionOk = false.