[Powered by Google Translate] [PHP Sessões] [Tommy MacWilliam, Harvard University] [Isto é CS50.] [CS50.TV] Sessões em PHP pode ser usado para implementar a funcionalidade, como logins de usuários, em sua aplicação web. Sessões PHP permitem associar informações com toda a sessão de navegação do usuário ao invés de simplesmente uma única página. Então isso significa que o usuário visita várias páginas PHP que compõem o seu site, qualquer informação na sessão persistirá. Então, o que significa que os dados armazenados na sessão de uma página mais tarde pode ser acessado por uma outra página. Armazenando informações em uma sessão é fácil, e fazemo-lo através do sinal de dólar, sublinhado, variável SESSION capital. Cifrão, sublinhado, SESSION, exatamente como cifrão, sublinhado, GET e sinal de dólar, sublinhado, PÓS- é um array associativo contendo pares de valores-chave. Assim, podemos usar cifrão sintaxe-like, sublinhado, SESSION, suporte, citações, foo, citações, suporte, é igual a, citações, bar, cotação on- para armazenar o valor "bar" na chave "foo". No entanto, antes de podermos escrever ou ler a partir da matriz de sessão, vamos precisar chamar uma função-especial sessão, sublinhado, iniciar () - e isso irá inicializar a sessão. Então, vamos dar uma olhada em um exemplo. Nossa primeira página, ola.php, usa a sessão para a saída de alguns dados para o usuário. Lembre-se, nós vamos precisar usar session_start antes que possamos acessar quaisquer dados de sessão. Agora estamos usando isset de PHP para determinar se uma chave existe na matriz associativa $ _SESSION. Se essa chave existir, isso significa que o usuário logado, então vamos exibir o nome do usuário. Se essa chave não está definido, isso significa que o usuário não tenha registrado no entanto, então vamos exibir um link para login.php. Então, vamos dar uma olhada em login.php. Por aqui, temos um formulário HTML simples com uma única entrada. Atributo action do formulário é de R $ _SERVER ['PHP_SELF'], e isso significa simplesmente que queremos que o formulário seja enviado ao arquivo atual, que, nesse caso, é login.php. Então, vamos voltar ao topo deste arquivo. Se o usuário enviar o formulário, em seguida, $ _POST ['nome'] deve ser definido. Para mais informações sobre formulários HTML e post, confira o vídeo Desenvolvimento Web PHP. No caso em que o usuário fez enviar o formulário, nós gostaríamos de escrever o valor que digitei na sessão. Agora podemos redirecionar o usuário para ola.php. Porque nós temos guardado a entrada do usuário para a sessão, ola.php será capaz de acessar o valor que foi definido em login.php. Então, vamos verificar isso em um navegador web. Primeiro, vamos navegar até http://localhost/ola.php. Podemos ver aqui que não se identificou, no entanto, então vamos clicar no link de login, que irá redirecionar-nos login.php. Ok, eu vou digitar meu nome, que será, então, armazenados na sessão. Ótimo! Agora podemos ver a minha entrada de login.php em ola.php via a sessão. Então, o que dizer de deslogar o usuário? Bem, a fim de registrar o usuário em, nós simplesmente armazenado um valor em nome da sessão. Então, para registrar o usuário para fora, nós simplesmente precisamos remover essa chave de nome a partir da matriz de sessão. Então, vamos dar uma olhada neste último arquivo, logout.php. Mais uma vez, vamos ter de chamar session_start () antes que possamos fazer qualquer coisa relacionada sessão. Agora podemos simplesmente chamar session_destroy () que vai cuidar de se livrar de todos os dados da sessão e, em seguida, redirecionar o usuário de volta para ola.php. Então, se eu clicar no link Sair, podemos ver que o servidor tenha esquecido quem eu sou, e eu já não estou conectado pol Então, o que está acontecendo aqui debaixo do capô? A fim de obter o comportamento que acabamos de ver, nosso servidor precisa fazer 2 coisas. Em primeiro lugar, o servidor precisa armazenar alguma forma, os dados da sessão. Os diferentes arquivos PHP que compõem um site são executados como invocações distintas do interpretador PHP variável para local não pode ser compartilhado entre eles. Em vez disso, o servidor precisa para armazenar nossos dados da sessão em algum lugar que múltiplas. php pode acessar. Em segundo lugar, o servidor precisa associar os dados da sessão com apenas a minha sessão de navegação. Quando eu entrar para o Facebook, provavelmente há milhões de outras pessoas também conectado ao Facebook, ao mesmo tempo. Mas o servidor precisa de alguma forma de associar os meus dados com a minha atual sessão e os dados de outra pessoa com outra sessão. Felizmente, os autores do PHP pensou em tudo isso para nós, de modo que não precisa implementar nada disso nós mesmos. Mas vamos dar uma olhada no que o PHP faz por padrão. Quando eu visitar uma página PHP contendo session_start pela primeira vez, PHP irá gerar um valor aleatório de grande porte. Até session_destroy é chamado ou eu não visitar as páginas PHP nesse site por um tempo- esse valor aleatório e provavelmente único vai ser associado com me. Dessa forma, o servidor tem alguma forma de identificar a minha sessão de navegação em oposição a outra pessoa. Podemos tomar um olhar para o ID da sessão atual usando a função PHP, session_ID. Aqui nós estamos simplesmente a saída o valor do nosso identificador de sessão. Então, se nós de novo login para o web app exemplo, e agora navegar para sessid.php, vamos ver essa longa seqüência de caracteres, e isso é o identificador atual para a minha sessão, e é assim que o servidor é manter o controle de quem eu sou. Ok, mas só já resolveu metade do problema. Claro, o servidor agora tem alguma forma de me identificar, mas quando eu visitar outra página, o servidor precisa reutilizar esse mesmo identificador em vez de gerar um novo. Lembre-se, se eu declarar uma variável local em foo.php e depois visite bar.php, bar.php tem nenhuma maneira de saber o que aconteceu no foo.php. Assim, a implementação sessão php padrão requer que o navegador lembrar o servidor qual sessão ID para usar. Isto é implementado sob a forma de um biscoito. Um cookie-além de ser um delicioso lanche- é simplesmente um pequeno arquivo de texto em seu computador que um servidor pode escrever a via navegador web. Então, depois de PHP gera minha sessão exclusiva de identificação via session_start, ele vai dizer o navegador web para armazenar esse identificador em um arquivo de texto local, ou um cookie. Em seguida, o navegador web irá incluir esse identificador em cada pedido que faz com que o servidor. Então, realmente, o servidor web não é lembrar quem eu sou. Em vez disso, o navegador web é simplesmente lembrar o identificador único que foi gerado pelo PHP e, em seguida, constantemente lembrando o servidor o que esse identificador é. Dessa forma, informações como o meu nome de usuário é armazenado no servidor não é meu navegador. O browser simplesmente diz ao servidor onde o PHP armazenada essa informação assim PHP pode recuperá-lo. Assim que levanta a questão: onde está o PHP realmente armazenar essa informação? Por padrão, o PHP irá armazenar os dados da sessão em um arquivo dentro de / tmp, ou a pasta 'temp'. O nome do arquivo que irá incluir a ID da sessão para que o PHP pode determinar qual arquivo para ler e escrever a partir de via apenas o ID da sessão. Tudo bem. Então, vamos abrir a guia Rede no depurador do Chrome através do ícone de chave inglesa no canto superior direito. Agora vamos ir ao ola.php novamente. Vamos clicar sobre a solicitação HTTP para ola.php e, em seguida, clique em cabeçalhos. Aqui podemos ver que o cabeçalho cookie contém uma chave chamada PHPSESSID, ou sessão PHP ID-com um valor que é que mesma seqüência muito tempo vimos quando visitamos sessid.php. Isto é exatamente como o navegador está lembrando o servidor que ID de sessão deve ser usado. É incluí-lo em um cabeçalho HTTP. Tudo bem. Vamos voltar para o terminal. Vamos navegar para / tmp, onde o PHP está armazenando as informações da sessão, por padrão. Com certeza, dentro desta pasta temporária, aqui está um arquivo que contém o mesmo ID da sessão exata. Se abrir este arquivo, podemos ver como o PHP está representando minha sessão no disco. Aqui, a string "Tommy" está sendo armazenado para a chave 'nome' que é exatamente o que nós esperávamos. E isso é uma visão geral de sessões em PHP. O que acabamos de ver foi só a implementação padrão de sessões. Na verdade, muitos sites alterar esse comportamento padrão para armazenar as sessões PHP mais eficientemente no interesse de melhorar o desempenho. Meu nome é Tommy, e essa é CS50. [CS50.TV]