Jump to content
renato_m

Controlar sessão em php

Recommended Posts

renato_m

Boa tarde a todos,

Estou a desenvolver uma pagina ou os utilizadores procedem a um login para entrarem na mesma,

para iniciar a sessão em php estou a usar o session_start() e tenho varias variáveis de sessão.

Agora o que pretendia fazer era o seguinte, caso o mesmo utilizador se volte a ligar à pagina

queria terminar a outra sessão que se encontra activa, pelo que li para termina a sessão é usado o

session_destroy mas como posso fazer para terminar a sessão de um determinado utilizador?

Obrigado

Share this post


Link to post
Share on other sites
softklin

Com sessões, por si, também não tenho nenhuma ideia, porque cada sessão está associada a um browser (para simplificar).

O que podes fazer é, na base de dados, teres um campo/tabela dedicada aos utilizadores com sessão iniciada. Nessa tabela, guardas o session_id, ou um id gerado por ti na sessão, que é definido no login.

Se a sessão for iniciada noutro local, o id de sessão/id aleatório vai mudar, e enquanto esse cliente pode navegar naquele browser, o outro cliente com a outra sessão é redireccionado para a página de login, porque entretanto o id que tinha na sessão dele já não está na tabela.

Isto por si, não destrói as variáveis, mas como os ids são diferentes, podes destruir a sessão, porque sabes que houve outro login mais recente. O importante, para funcionar, é que valides a cada requisição se o session id coincide com o que está na base de dados.


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
renato_m

Acho que já percebi a tua ideia e de facto para o meu problema chega essa solução, entao o que tenho de fazer é em cada pedido que o user faça ao servidor seja verificado esse id. Basta um atributo na tabela do utilizador com o id não é necessário uma tabela auxiliar porque não quero fazer um historio dos id.

O session do php gera um id não é? Tenho ideia de ter lido isso algures que ele gerava um id....

Uma questão como tenho variaveis de sessão em todas as paginas php que construí faço o session_start() no inicio correcto?

É que o php está sempre a queixar-se e tive que meter o @ para ele não se queixar mais, mas tenho medo de estar a fazer alguma coisa

mal.

Obrigado

Share this post


Link to post
Share on other sites
softklin

Acho que já percebi a tua ideia e de facto para o meu problema chega essa solução, entao o que tenho de fazer é em cada pedido que o user faça ao servidor seja verificado esse id. Basta um atributo na tabela do utilizador com o id não é necessário uma tabela auxiliar porque não quero fazer um historio dos id.

O session do php gera um id não é? Tenho ideia de ter lido isso algures que ele gerava um id....

Uma questão como tenho variaveis de sessão em todas as paginas php que construí faço o session_start() no inicio correcto?

É que o php está sempre a queixar-se e tive que meter o @ para ele não se queixar mais, mas tenho medo de estar a fazer alguma coisa

mal.

Obrigado

Sim, a sessão tem um id associado, que podes obter através da função session_id().

Quanto ao session_start(), convém ser antes do output da página, o início é uma boa escolha. O erro que te está a dar pode ter a ver com o facto de já teres definido uma função, nesse caso o PHP gera um warning, e não um erro fatal, continuando a sua execução. Por isso, não tem mal colocares o @ (operador de supressão de erros). Alternativamente, podes fazer um if a verificar se a sessão e se ainda não existir, fazes uma chamada ao session_start().

Quanto à tabela, podes colocar um atributo na tabela de utilizadores, visto que só tens uma session por utilizador. A minha ideia quanto à tabela não era bem guardar um histórico de sessões, mas separar os sessions id dos dados dos utilizadores, uma vez que são temporários, por questões de organização e performance, para não estar sempre a alterar a tabela de utilizadores: por exemplo, criavas a tal tabela com (id do utilizador, session id) com o storage engine MEMORY.

http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html

Mas vai dar ao mesmo, para o ponto de vista do utilizador.


Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Share this post


Link to post
Share on other sites
brunoais

O session do php gera um id não é? Tenho ideia de ter lido isso algures que ele gerava um id....

Uma questão como tenho variaveis de sessão em todas as paginas php que construí faço o session_start() no inicio correcto?

É que o php está sempre a queixar-se e tive que meter o @ para ele não se queixar mais, mas tenho medo de estar a fazer alguma coisa

mal.

As of PHP 4.3.3, calling session_start() after the session was previously started will result in an error of level E_NOTICE. Also, the second session start will simply be ignored.

fonte: http://php.net/manual/en/function.session-start.php


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
renato_m

Muito obrigado pela ajuda, já esta a funcionar como queria.

Mais uma vez obrigado pela excelente ajuda :happybday:

Share this post


Link to post
Share on other sites
brunoais

usar o @ com o session_start() n tem problema (segundo o manual de instruções), por isso, podes usar à vontade com essa função.


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.