0
セクションを保存するためのカスタムコードを作成しました。私はまもなくページに戻り、セッションが保存され、ログインが成功として返されます。私のセッションは他のページに残っていません
しかし、私はこのページのフォームから情報を保存しようとしていますが、私がログインしているかどうかを確認して、失敗したとして返されます。
ログインしてログインを確認する別のページにナビゲートすると、セッションtbmは保持されません。
誰でも可能なことを知っていますか、または私がこれらの機能に欠けているものを見つけられますか?
方法は、ログイン後に、これは
function login_check($mysqli) {
// Verifica se todas as variáveis das sessões foram definidas
if (isset($_SESSION[user_id], $_SESSION[username], $_SESSION[login_string])) {
$user_id = $_SESSION[user_id];
$login_string = $_SESSION[login_string];
$username = $_SESSION[username];
// Pega a string do usuário.
//$user_browser = $_SERVER[HTTP_USER_AGENT];
if ($stmt = $mysqli->prepare("SELECT usuarioSenha FROM usuario WHERE usuarioCod = ? LIMIT 1")) {
// Atribui "$user_id" ao parâmetro.
$stmt->bind_param('i', $user_id);
$stmt->execute(); // Execute the prepared query.
$stmt->store_result();
if ($stmt->num_rows == 1) {
// Caso o usuário exista, pega variáveis a partir do resultado.
$stmt->bind_result($password);
$stmt->fetch();
$login_check = $password;//hash('sha512', $password.$user_browser);
if ($login_check == $login_string) {
return true;
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
} else {
return false;
}
}
にログインしているかどうかを確認する
<? php
include_once 'functions.php';
sec_session_start();
$ error_msg = "";
$ page = "postar.php";
if (isset ($ _ POST [post]) && $ _POST [post] == "Upload") {
$ Image = "";
if (isset ($ _ FILES [btcapa]) &&! empty ($ _ FILES [btcapa] [name])) {
$ btimage = $ _FILES [btcapa];
switch ($ _ POST [sacervo]) {
case '1':
$ update = "img/comic";
break;
case '2':
$ update = "img/books";
break;
case '3':
$ updir = "img/files";
break;
}
$ Image = valida_upload ($ btimage, $ update);
if ($ Image [0] == '<') {
$ error_msg. = "<li> Document: not loaded." $ btimage [name]. "</ li>";
$ error_msg. = $ Image;
$ Image = '';
}
}
if (login_check ($ mysqli) == true) {
switch ($ _ POST [sacervo]) {
case '1':
$ error_msg. = valida_gibis ($ mysqli, $ Image);
break;
case '2':
$ error_msg. = validate_book ($ mysqli, $ Image);
break;
case '3':
$ error_msg. = validate_files ($ mysqli, $ Image);
break;
}
if ($ error_msg == '') {
if (! empty ($ Image)) {$ upload = move_uploaded_file ($ _ FILES [btcapa] [tmp_name], $ Image); }
$ msg_sucesso = "<li> Successfully inserted. </ li>";
header ('Location: ../'.$page.'?retorno='.$msg_sucesso);
} else {
header ('Location: ../'.$page.'?retorno='.$error_msg);
}
} else {
$ error_msg. = "<li> Could not insert, please log back in. </ li>";
header ('Location: ../postar.php?retorno='.$error_msg);
}
}
?>
個人ログオン機能
function sec_session_start() {
$session_name = 'SESSION'; // Estabeleça um nome personalizado para a sessão
$secure = SECURE;
// Isso impede que o JavaScript possa acessar a identificação da sessão.
$httponly = true;
// Assim você força a sessão a usar apenas cookies.
if (ini_set('session.use_only_cookies', 1) == FALSE) {
header("Location: ../error.php?err=Could not initiate a safe session (ini_set)");
exit();
}
// Obtém params de cookies atualizados.
$cookieParams = session_get_cookie_params();
session_set_cookie_params(time()+3600,
$cookieParams[path],
$cookieParams[domain],
$secure,
$httponly);
// Estabelece o nome fornecido acima como o nome da sessão.
session_name($session_name);
ob_start();
session_start(); // Inicia a sessão PHP
session_regenerate_id(); // Recupera a sessão e deleta a anterior.
setcookie(session_name(), '', time() + 3600, $params[path], $params[domain], $secure, $httponly);
}
機能をフォーム情報を保存します
ログイン機能
function login($email, $password, $mysqli) {
// Usando definições pré-estabelecidas significa que a injeção de SQL (um tipo de ataque) não é possível.
if ($stmt = $mysqli->prepare("SELECT usuarioCod, usuarioNome, usuarioSenha
FROM usuario
WHERE usuarioEmail = ?
LIMIT 1")) {
$stmt->bind_param('s', $email); // Relaciona "$nusp" ao parâmetro.
$stmt->execute(); // Executa a tarefa estabelecida.
$stmt->store_result();
// obtém variáveis a partir dos resultados.
$stmt->bind_result($user_id, $user_name, $user_senha);
$stmt->fetch();
// faz o hash da senha com um salt excusivo.
//$password = hash('sha512', $password);
if ($stmt->num_rows == 1) {
if ($user_senha == $password) {
$_SESSION[user_id] = $user_id;
$_SESSION[username] = $user_name;
$_SESSION[login_string] = $user_senha;//hash('sha512', $password.$user_browser);
return '';
}
} else {
// Tal usuário não existe.
return '<p class="error"> Não existe esse usuario </p>';
}
}else {
return '<p class="error"> contate o adiministrador </p>';
}
}
各ページに 'session_start()'がありますか? –
はい、各ページに「sec_session_star()」という関数があります。そこには、「session_start()」が含まれています。 'session_start()'だけを試しても動作しないか、ログインすることはできません。個人ログオン機能で –
を2回セッションを開始すると、それはなぜですか? – Niels