Sessão refere-se ao tempo que decorre desde a entrada no site até ao fecho do navegador quando o utilizador está a navegar num site, ou seja, o tempo que o utilizador passa a navegar no site. Pela definição acima, podemos ver que Session é na verdade um conceito de tempo específico.
De modo geral, variáveis (referindo-se às variáveis do lado do servidor, as mesmas abaixo) em uma determinada página do site não podem ser utilizadas na próxima página. É mais fácil de manusear com sessão. Variáveis cadastradas na sessão podem ser utilizadas como variáveis globais. Dessa forma, podemos usar a sessão para autenticação da identidade do usuário, registro do status do programa e transferência de parâmetros entre páginas.
Como a sessão é implementada na versão PHP3?
O próprio PHP3 não implementa a função de sessão. Só podemos usar outros métodos para implementá-la, o mais famoso deles é o phplib. As funções mais básicas do phplib incluem autenticação de usuário, gerenciamento de sessões, permissões e abstração de banco de dados. A seguir descreveremos como usar o phplib para implementar a sessão.
1. Primeiro instale o phplib (o ambiente é win2000+php3.0.16+Apache1.3.12+phplib7.2c+mysql3.23.21 para win32).
Primeiro, descompacte o phplib. diretório de instalação. Por exemplo: o Apache é instalado no diretório d:Apache, então copie o diretório "php" para d:Apache e copie os arquivos e diretórios no diretório pages do diretório phplib (excluindo o próprio diretório) para d: Em Apachehtdocs.
A biblioteca de classes phplib precisa ser inicializada de acordo com o sistema, e o arquivo local.inc pode precisar ser modificado, que contém alguns parâmetros básicos, que podem ser modificados de acordo com a situação real da sua máquina.
Altere o programa no arquivo d:Apachephpprepend.php para o seguinte:
if (!isset($_PHPLIB) ou !is_array($_PHPLIB)) {
$_PHPLIB["libdir"] = "d:/Apache/php/" //O caminho para o diretório php em phplib
}
Modifique o arquivo d:Apachephplocal.inc:
class DB_Example extends DB_Sql {
var $Host = "localhost" //O nome do host do banco de dados mysql var $Database = "test" //Nome do banco de dados var $User = "root"; //Senha do usuário do banco de dados
}
Finalmente, a tabela inicial é gerada com base no arquivo create_database.mysql no subdiretório stuff do diretório phplib.
Como cada página que usa phplib deve primeiro ser capaz de encontrar os arquivos da biblioteca de classes necessários para executar o phplib, podemos definir a variável auto_prepend em php.ini para suportá-la. phplib contém um arquivo prepend.php e especifica auto_prepend como "d: /. Apache/php/prepend.php" (com aspas), cada página incluirá automaticamente a biblioteca de classes phplib. Também podemos adicionar o diretório onde a biblioteca de classes phplib está localizada à variável include para que esses arquivos possam ser encontrados. 2. Chame a função page_open()
Em cada página usando phplib, você deve primeiro chamar a função page_open para inicialização, por exemplo:
<?php.
page_open(array("sess" => "Test_Session"));
?>
Variáveis de array (sess) são usadas para inicializar alguns objetos de salvamento de estado. Deve ser observado aqui: nomes internos do phplib (sess) devem ser usados.
Como o phplib usa Cookies para salvar informações de estado, a função page_open() deve ser chamada antes que o conteúdo da página seja enviado ao navegador. O script php deve terminar com page_close(), que gravará os dados de status relevantes de volta no banco de dados, caso contrário as variáveis serão perdidas.
3. Uso específico.
Após registrar uma variável, você poderá utilizá-la nas páginas subsequentes até o término da sessão. Método:
<?php $sess->register( "varname");
Observe que varname aqui não é um valor de variável, mas um nome de variável. Você pode especificar o nome da variável primeiro e depois atribuir o valor. Você pode alterar o valor de uma variável em uma determinada página, e o valor alterado será obtido quando a variável for acessada nas páginas subsequentes. Os tipos de variáveis são diversos e podem ser uma string, um número ou uma matriz. Por exemplo:
primeira página:
<?php
page_open(array("sess" => "Teste _Sessão"));
$sess->register( "welcome"); //Registra a variável $welcome, observe que não há necessidade de adicionar $
$bem-vindo="Olá, mundo PHP!";
…
page_close();
?>
Segunda página:
<?php
page_open();//inicia sessão
echo $bem-vindo;//Exibe $bem-vindo definido na primeira página
page_close();//Salva informações de status
?>
Depois de registrar uma variável, quando a página finalmente chamar a função page_close(), cada variável de sessão será gravada de volta no banco de dados. Se você esquecer de chamar a função page_close(), as variáveis não serão gravadas de volta no banco de dados, o que terá consequências imprevisíveis. Quando a variável tiver sido usada e não for mais necessária, a seguinte função pode ser chamada para excluir a variável:
<?php
page_open(array("sess" => "Teste _Sessão"));
…
$sess->unregister( "nome_variável");
…
page_close();
?>
Como implementar sessão na versão PHP4?
A sessão do PHP4 também depende de cookies para salvar ids de sessão e usa o sistema de arquivos para salvar variáveis (por padrão, suas variáveis de sessão não podem salvar objetos). Claro, a sessão também pode ser salva no banco de dados.
Existem muitas funções relacionadas à sessão no php4 (veja o artigo configuração do php.ini para detalhes). Normalmente só precisamos chamar três funções: session_start(), session_register(), session_is_registered().
Chame a função session_start() no início de cada página que requer sessão, por exemplo:
<?session_start()?>
<html><corpo>
<?
$bem-vindo="olá mundo!";
session_register("welcome");//Registra a variável $welcome, observe que não há símbolo $ if(session_is_registered("welcome"))//Verifica se a variável $welcome está registrada echo "variável de boas-vindas foi registrada!";
outro
echo "A variável de boas-vindas ainda não foi registrada!";
?>
</body></html>
Para personalizar o processamento da sessão no php4,
precisamos expandir 6 funções:
·sess_open($sess_path, $session_name);
Esta função é chamada pelo manipulador de sessão para inicialização;
O parâmetro $sess_path corresponde à opção session.save_path no arquivo php.ini. O parâmetro $session_name corresponde à opção session.name no php.ini.
·sess_close();
Esta função é chamada quando a página termina a execução e o manipulador desessão
precisa ser fechado.
·sess_read($key);
).Dados de sessão de $key (Nota: serialização é uma tecnologia que salva variáveis ou objetos em um arquivo no final do programa ou quando necessário e, em seguida, os transfere para a memória quando o programa é executado ou é necessário na próxima vez. é diferente do método de salvar apenas os dados. )
·sess_write($key, $val);
Esta função é chamada quando o manipulador de sessão precisa salvar os dados, o que geralmente acontece no final do programa. É responsável por salvar os dados em um local onde possam ser recuperados na próxima vez usando a função sess_read($key).
·sess_destroy($key);
Esta função precisa destruir a sessão. É responsável por deletar a sessão e limpar o ambiente.
·sess_gc($maxlifetime);
Esta função é responsável por limpar os fragmentos. Neste caso, ele é responsável por excluir os dados desatualizados da sessão. Os manipuladores de sessão os chamam ocasionalmente.
O programa personalizado pode usar um banco de dados mysql ou arquivo DBM para salvar os dados da sessão, dependendo da situação específica. Se você usa mysql para suporte, você precisa executar os seguintes passos:
Primeiro crie um banco de dados de sessões no mysql e crie uma tabela de sessões:
mysql> CREATE DATABASE session;
mysql>GRANT selecione, insira, atualize, exclua sessões ON.* TO phpsession@localhost
-> IDENTIFICADO POR 'phpsession';
mysql> sessões CREATE TABLE (
-> sesskey char(32) não nulo,
-> expiração int(11) sem sinal não nulo,
-> texto do valor não nulo,
-> CHAVE PRIMÁRIA (sesskey)
-> );
Em seguida, modifique as variáveis $SESS_DB* no arquivo session_mysql.php para corresponder às configurações do banco de dados em sua máquina:
<?
$SESS_DBHOST = "localhost" /* Nome do host do banco de dados*/
$SESS_DBNAME = "sessões" /* nome do banco de dados*/
$SESS_DBUSER = "phpsession" /* Nome de usuário do banco de dados*/
$SESS_DBPASS = "phpsession" /* Senha do banco de dados*/
$SESS_DBH = "";
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime");
……//Função personalizada
session_set_save_handler( "sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc");
?>
Personalize a interface ao usar arquivos dbm:
<?
$SESS_DBM = "";
$SESS_LIFE = get_cfg_var("session.gc_maxlifetime");
……//Função personalizada
session_set_save_handler("sess_open", "sess_close", "sess_read", "sess_write", "sess_destroy", "sess_gc");
?>
Código de teste personalizado da sessão:
<?php
…
if ($handler == "dbm") include("session_dbm.php");//Qual interface usar
elseif ($handler == "mysql") include("session_mysql.php");
senão…
session_start();
session_register("contagem");
…
?>
Como usar Session na autenticação?
A sessão pode ser usada para autenticação do usuário:
verifique se o usuário é legítimo:
<?
sessão_start();
……//Processo de verificação session_register("reguser");
?>
Verifique se o usuário está logado em outra página
<?
sessão_start();
if(isset($reguser)&&$reguser!=""){//Se você estiver logado echo "Prezado usuário, seja bem-vindo";
}else{//Se você não estiver logado echo "Por favor, registre-se primeiro!";
}
?>
Usuário sai:
<?
session_destroy();
…
?>
Como implementar múltiplas sessões em execução simultaneamente?
Pergunta: Quando eu estava escrevendo um sistema de compras, vendas e estoque para minha unidade, descobri que era necessário permitir que vários usuários entrassem em uma aplicação PHP ao mesmo tempo. O ID de sessão exclusivo estático originalmente projetado causou confusão de dados. Dessa forma, a geração dinâmica de um ID de sessão exclusivo torna-se uma prioridade máxima.
A solução é simples: usei o nome do arquivo php + timestamp como ID de sessão exclusivo, para que cada sessão do meu programa esteja em seu lugar e não haja mais confusão.
Publicarei meu código fonte abaixo para que amigos que tenham o mesmo problema possam encontrar uma solução.
//Iniciar uma sessão PHP para preservar variáveis.
if (empty($nomedaminhasessão)) {
$micro = microtempo();
$micro = str_replace(" ","",$micro); // retire os espaços em branco
$micro = str_replace(".","",$micro); // remove os pontos.
$mysessionname = "po_maint" $micro;
}
nome_sessão($nome_sessão);
session_start();
Notas do programa:
Use mysessionname para passar variáveis para o sessionname exclusivo entre páginas. Se você também usar esse nome, deverá fazer uma pequena alteração no programa acima. Mysessionname não pode ser o nome da variável interna da sessão porque ela já existe antes do início da sessão. Mysessionname não pode ser armazenado no modo cookie, porque múltiplas sessões substituirão definitivamente o arquivo cookie original. Você pode salvá-lo usando campos de formulário ocultos. Então não haverá problema.