Qual é a maneira mais atual, boa prática e maneira mais fácil de usar sessões em PHP?

Sessões em PHP pareciam ter mudado desde a última vez que eu as usei, então estou procurando uma maneira simples de usar as sessões, mas ao mesmo tempo para que seja relativamente seguro e uma boa prática comum.

0
adicionado
Visualizações: 2

7 Respostas

As sessões foram uma parte crítica do meu conhecimento do PHP porque me ajudaram a resolver meu problema de autenticação de log quando eu estava desenvolvendo meu primeiro aplicativo da web.

session_start();
if( isset($_POST['username']) && isset($_POST['password']) )
{
    if( auth($_POST['username'], $_POST['password']) )
    {
        //Authentication passed
        $_SESSION['user'] = $_POST['username'];
       //redirect to required page
        header( "Location: index.php" );
    } 
    else 
    {
       //Authentication failed redirect to login
       header( "Location: loginform.html" );
    }
} 
else 
{
      //Username and Password are required
      header( "Location: loginform.html" );
}
0
adicionado

Gerenciamento de sessão mudou algum tempo atrás (eu acho que foi em torno de 4,4). O mecanismo antigo ainda funciona, mas está obsoleto. É bastante confuso, então eu recomendo ficar claro. Hoje, você usa sessões acessando a variável global $ _SESSION (É uma matriz). Você pode colocar instâncias de objeto lá, mas é necessário carregar as definições de classe para esses objetos antes de iniciar a sessão na próxima página. Usar autoload pode ajudá-lo aqui.

Você deve iniciar uma sessão antes de poder usar $ _SESSION. Desde o início da sessão envia cabeçalhos, você não pode ter qualquer saída antes. Isso pode ser resolvido de duas maneiras: Ou você sempre começa a sessão no início do seu script. Ou você armazena toda a saída , e a envia no final de o roteiro.

Uma boa ideia é regenerar a sessão em cada solicitação. isso torna o seqüestro muito menos provável.

Esse é um conselho (ligeiramente) ruim, já que pode tornar o site inacessível. Você deve regenerar o ID da sessão sempre que um usuário privilégios muda embora. Em geral, isso significa, sempre que eles se conectarem. Isso é para evitar a fixação de sessão (uma forma de seqüestro de sessão). Veja este tópico recente @ Sitepoint para mais informações sobre o assunto.

Usar sessões baseadas em cookies somente é OK, mas se você gerar novamente ids de sessão no login, isso não adicionará nenhuma segurança adicional e diminuirá um pouco a acessibilidade.

0
adicionado
Olhe de perto. Regenerar ID de sessão é sim, mas somente quando você precisa. Isso significa que quando o usuário efetua login.
adicionado o autor troelskn, fonte
Eu fui até o fórum do sitepoint e dei uma olhada. Pelo que vejo, na verdade eles parecem recomendar a regeneração de código, bem como o uso de cookies apenas no geral.
adicionado o autor Laith, fonte
nem todo mundo no segmento concorda com essa postura
adicionado o autor Laith, fonte

Encapsule a matriz $ SESSION em um Session() Object que permite obter variáveis ​​de uma sessão, obter e postar de maneira semelhante (ainda dissociável), incluindo filtros de segurança automáticos, variáveis ​​flash (var que são usadas uma vez e depois distroyed), e setters de valor padrão.

Dê uma olhada no comportamento do Symfony nesse ponto, é muito útil.

0
adicionado

Em primeiro lugar, use cookies com base apenas, a menos que você tenha uma razão comercial muito específica para não fazê-lo. Eu tinha um cliente que insistia em sessões baseadas em URL apenas para um projeto. muito inseguro e uma dor para trabalhar.

Uma boa ideia é regenerar a sessão em cada solicitação. isso torna o hijack muito menos provável. Por exemplo.

session_start();
$old_sessionid = session_id();
session_regenerate_id();
$new_sessionid = session_id();

Outra coisa que é boa prática é se você estiver fazendo algum tipo de login de usuário como parte do sistema, completamente invalidar e esvaziar os dados da sessão em um logoff para garantir que o usuário esteja realmente desconectado do sistema. Eu vi sistemas onde logout é apenas realizado, removendo o cookie de sessão.

0
adicionado

No que diz respeito à simplicidade, não há nada melhor que:

# Start the session manager
session_start(); 

# Set a var
$_SESSION['foo'] = 'whatever';

# Access the var
print $_SESSION['foo'];
0
adicionado

Você pode armazenar sessões PHP no banco de dados, conforme descrito em este   livro. Eu usei esse método e acho que é seguro e fácil de implementar, então eu recomendo.

0
adicionado

Embora o banco de dados possa ser mais seguro para sessões, você deve se concentrar no que você está armazenando na sessão - ele não deve conter nada além de um ID para identificar o usuário (e TALVEZ um nome ou uma variável temporária entre páginas). ).

Eu sugeriria simplesmente usar os cookies padrão. Sessões de banco de dados dão um hit extra em cada página, e mesmo que nem todos os sites sejam slashdot, não há problema em pré-otimizar algo tão simples quanto isso.

Para uso, eu recomendaria a variável global padrão:

$_SESSION['yourvar'] = 'somevalue';

Se você usar esse método em todo o seu código, você pode facilmente alterar o back-end mais tarde através do uso de session_set_save_handler , que fornece uma maneira unificada de implementar backends de sessão. Note que você pode usar um objeto para conter todo o tratamento de sessão, simplesmente dê matrizes para cada array de entrada ('Staticclass', 'staticmethod').

Para um uso mais profundo, eu recomendo que você dê uma olhada em como as sessões são tratadas em KohanaPHP .

0
adicionado