Pergunta

Como único é o id de sessão php? Eu tenho a impressão de várias coisas que eu li que eu não deveria contar com dois usuários nunca recebendo o mesmo idsessão. não é um GUID?

Foi útil?

Solução

SESSION_ID pode realmente ser duplicados, mas a probabilidade é muito baixa. Se você tem um site com um tráfego justo, pode acontecer uma vez em que você web vida local, e só vai irritar um usuário para uma sessão.

Isto não vale a pena se preocupar com a não ser que você espera para construir um site muito alto tráfego ou um serviço para a indústria bancária.

Outras dicas

Não é muito original, como foi enviada. Na configuração padrão é o resultado de um hash de várias coisas, incluindo o resultado de gettimeofday (que não é terrivelmente único), mas se você está preocupado, você deve configurá-lo para tirar algumas entropia de / dev / urandom, como assim

ini_set("session.entropy_file", "/dev/urandom");
ini_set("session.entropy_length", "512");

procurar "php_session_create_id" em o código para o algoritmo real que está usando.

Editado para adicionar: Há um gerador de números aleatórios DFA semeado pelo pid, misturado com o tempo em usecs. Não é uma condição singularidade empresa especialmente a partir de uma perspectiva de segurança . Use a configuração entropia acima.

Update:

A partir do PHP 5.4.0 padrões session.entropy_file para / dev / urandom ou / Dev / arandom se ele estiver disponível. No PHP 5.3.0 esta directiva é deixado esvaziar por padrão. Manual do PHP

Se você quiser saber como PHP gera um ID de sessão por meio de cheque padrão o código-fonte em Github . Certamente não é aleatória e é baseada em um hash (padrão: md5) destes ingredientes (ver linha 310 de trecho de código):

  1. Endereço IP do cliente
  2. Horário atual
  3. PHP Linear congruência Generator - um gerador pseudo número aleatório (PRNG)
  4. fonte aleatória específicos do OS - se o sistema operacional tem uma fonte aleatório disponível (por exemplo / dev / urandom)

Se o OS tem uma fonte aleatória força então disponível do ID gerado para o propósito de ser um ID de sessão é elevada ( / dev / urandom e outras OS fontes aleatórias são (geralmente) PRNGs criptograficamente seguras ). Se, no entanto isso não acontecer, então é satisfatório.

O objetivo com a geração de identificação sessão é:

  1. minimizar a probabilidade de gerar dois IDs de sessão com o mesmo valor
  2. torná-lo muito desafiador computacionalmente para gerar chaves aleatórias e bater um no uso de um .

Isto é conseguido pela abordagem do PHP para geração sessão.

Você não pode absolutamente garantir a unicidade , mas as probabilidades são tão baixos de bater o mesmo hash duas vezes que é, em geral, não vale cerca de preocupante.

Você pode instalar uma função alternativa de geração de hash se você quiser personalizar a forma como o ID é gerado (é um número de 128 bits gerada via MD5 por padrão). Consulte http://www.php.net/ / en / session.configuration.php # ini.session.hash-função manual

Para mais informações sobre sessões PHP, tente este excelente artigo http://shiflett.org / artigos / a-verdade-sobre-sessões que também links para outros artigos sobre fixação de sessão e sequestro.

Tamanho da session_id
Assume-se que seesion_id é uniformemente distribuído e tem size = 128 bits. Suponha que cada pessoa no planeta efetua login uma vez por dia com uma persistente uma nova sessão para 1000 anos.

num_sesion_ids  = 1000*365.25 *7*10**9 < 2**36
collission_prob < 1 - (1-1/2**82)**(2**36)  ≈ 1 - e**-(1/2**46) 
                ≈ 1/2**46 

Assim, a probabilidade de um ou mais colisão é menos de uma em 70 mil milhões. Daí a um 128-bit tamanho da session_id deve ser grande o suficiente. Como mencionado em outros comentários, o session_manager também pode verificar que o novo session_id ainda não existir.

aleatoriedade
Portanto, a grande questão que eu acho que é se o session_id: s são gerados com boa aleatoriedade pseudo. Por que você nunca pode ter certeza, mas eu recomendo o uso de uma solução padrão bem conhecido e frequentemente utilizado para este fim (como você provavelmente já o fazem).

Mesmo que as colisões são evitadas devido à verificação, aleatoriedade e tamanho de session_id é importante, para que hackers não podem, de alguma forma fazer adivinhação qualificado e encontrar session_id ativo:. S, com grande probabilidade

Eu não encontrei uma confirmação sobre isso, mas eu acredito PHP verifica se um ID de sessão já existe antes de criar um com que id.

A questão sessão hijacking pessoas estão preocupadas com é quando alguém descobre o id de sessão de um usuário ativo. Isto pode ser evitado em muitos aspectos, para mais informações sobre isso você pode ver desta página em php.net e este papel na sessão de fixação

Não, ID de sessão não é um GUID, mas dois usuários não devem ter o mesmo ID de sessão como eles são armazenados no lado do servidor.

<?php
session_start();
$_SESSION['username']="username";
?>

<!DOCTYPE html>
<html>
<head>
    <title>Update</title>
</head>
<body>

<table border="2">
    <tr>
        <th>Username</th>
        <th>Email</th>
        <th>Edit</th>
    </tr>
<?php
     $conn=mysqli_connect("localhost","root","","telephasic");
     $q2="select * from register where username = '".$_SESSION['username']."'";
     $run=mysqli_query($conn, $q2);
     while($row=mysqli_fetch_array($run))
     {
         $name=$row[1];
         $email=$row[2];
     ?>

    <tr>
        <td><?php echo $name; ?></td>
        <td><?php echo $email; ?></td>
        <td><a href="edit.php"> Edit </a></td>
    </tr>
 <?php } ?>
 </table> 
 </body>

Se o seu nome de usuário é diferente ou único que você pode usar este código para a sessão

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top