我制作了一个自定义代码以保留该部分,我很快就在一个页面上,我返回到同一页面,保存了会话并返回登录成功。
但是当我要从这个页面上的表格中保存信息时,我会检查我是否已登录并且在我失败时返回。
我还注意到,当我登录并浏览导航菜单到另一个检查登录的页面时,会话tbm不会保留。
有谁知道它可能是什么,或者你是否发现了我在这些功能中缺少的东西?
登录后保存表单信息的方法
<? 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_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;
}
}
登录功能
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>';
}
}
答案 0 :(得分:0)
我已将这3个功能从my session_start()
自定义为sec_session_start()
resoveu删除,但我不知道原因。
ob_start();
session_regenerate_id();
setcookie(session_name(), '', time() + 3600, $params[path], $params[domain], $secure, $httponly);