Sessões em Php [RESOLVIDO]

1. Sessões em Php [RESOLVIDO]

Josenildo Cardoso
dungamaster

(usa Debian)

Enviado em 12/11/2012 - 21:40h

Olá a todos,

Bem, faz um ano que iniciei em php e gostei muito da linguagem, comecei a desenvolver sistemas para a empresa que trabalho,
e nestes fazer uso de sessões e em um certo dia enquanto trabalhava em dois sistemas ao mesmo tempo, percebi que as variaveis de sessoes que tinham o mesmo nome nos dois sistemas ex: login, usuario, senha ficavam com o mesmo valor, se eu logasse com o usuario jose em um dos sistemas no outro o usuario jose se logava tambem, entao fiquei com algumas duvidas,

como poderia fazer para não haver estes conflitos entre variaveis de sessoes?

Posso usar cookies em vez de sessoes? e qual a diferença entre eles?




  


2. Re: Sessões em Php [RESOLVIDO]

Juliano Giacomeli
julianjedi

(usa Arch Linux)

Enviado em 13/11/2012 - 00:08h

Amigo as sessões ficam armazenadas localmente no computador cliente, para não permitir logins multiplos com o mesmo usuário vc deve criar alguma flag no banco de dados que qdo o usuario logar avisa que já está logado e não permite outro login **grosseiramente falando vc controla o estado de logado ou offline pelo banco de dados, mas isso pode ser um problema porque se por algum motivo o usuário não clicar em logout .. e pode ter certeza que ele não vai fazer isso .. a flag logado vai ficar setada no banco de dados, ai vc terá que fazer a sessão do banco de dados expirar a cada tempo, ou usar algum tipo de arquivo para controlar a sessão em um diretório temporário, enfim tem muitas maneiras de se fazer eh soh escolher uma linha de raciocínio e segui-la, mas com a $_SESSION não vai dar para controlar multiplos logins.


3. Re: Sessões em Php [RESOLVIDO]

Josenildo Cardoso
dungamaster

(usa Debian)

Enviado em 13/11/2012 - 00:50h

Obrigado por responder,

O meu caso, não é só um sistema, são dois sistemas com finalidades diferentes, mais nos dois sistemas ao fazer o login do usuario é criada uma variavel de sessão ex: $_SESSION['usuario']; eu uso essa variavel as vezes para ficar exibindo o nome do usuario no sistema, tipo: Ola Fulano, Bom dia Fulano, sendo assim caso eu faça login em um sistema, e ir no outro sistema e abri-lo, este segundo sistema ja carrega o valor da variavel 'usuario', esse é o conflito que falo.

Eu tenho esses problema devido o meu codigo para verificar se o usuario esta logado é o de apenas verificar se a variavel ($_SESSION['usuario']) existe, caso não exista o sistema considera o usuario não logado.

Não sei quais o metodos que os mais profissionais usam, mas pelo que andei pensando, eu poderia fazer a verificação de logado ou não de outras maneiras, tipo:

verifica se variavel de sessão 'usuario' existe, se sim
busca no banco se realmente existe o usuario, se sim, login aceito!!

dessa maneira eu iria reduzir os conflitos, mas não encerra-los de vez.

Outra maneira seria,
alterar o nome da variavel de sessao em cada sistema, ex: usuarioad, usuarioav.

e uma bem eficiente seria

criar uma sessao com nome (usuario + senha criptografada com hash), assim os conflitos acabariam, eu poderia ate tentar criar uma variavel com nome (usuario criptografado + senha criptografada).

Não sei quais o metodos mais seguros e mais eficientes usados pelos profissionais, mais se alguem souber seria bom,
vi um dia em um post alguma coisa sobre session_name(), alguem sabe qual a funcionalidade?


4. Re: Sessões em Php [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 13/11/2012 - 01:57h

julianjedi escreveu:

Amigo as sessões ficam armazenadas localmente no computador cliente, para não permitir logins multiplos com o mesmo usuário vc deve criar alguma flag no banco de dados que qdo o usuario logar avisa que já está logado e não permite outro login **grosseiramente falando vc controla o estado de logado ou offline pelo banco de dados, mas isso pode ser um problema porque se por algum motivo o usuário não clicar em logout .. e pode ter certeza que ele não vai fazer isso .. a flag logado vai ficar setada no banco de dados, ai vc terá que fazer a sessão do banco de dados expirar a cada tempo, ou usar algum tipo de arquivo para controlar a sessão em um diretório temporário, enfim tem muitas maneiras de se fazer eh soh escolher uma linha de raciocínio e segui-la, mas com a $_SESSION não vai dar para controlar multiplos logins.


Sério mesmo Julian???

Dunga, o que fica armazenado localmente no cliente são coockies (do navegador). Sessões são armazenadas na memória do servidor da aplicação/sistema.


O meu caso, não é só um sistema, são dois sistemas com finalidades diferentes, mais nos dois sistemas ao fazer o login do usuario é criada uma variavel de sessão ex: $_SESSION['usuario']; eu uso essa variavel as vezes para ficar exibindo o nome do usuario no sistema, tipo: Ola Fulano, Bom dia Fulano, sendo assim caso eu faça login em um sistema, e ir no outro sistema e abri-lo, este segundo sistema ja carrega o valor da variavel 'usuario', esse é o conflito que falo.


Esses dois sistemas estão no mesmo diretório no servidor? Por exemplo:

Aplicação 1: http://localhost/sistemas/app1
Aplicação 2: http://localhost/sistemas/app2

Isso poderia estar fazendo que o servidor interpretasse as duas aplicações como uma. Mas isso não pode ocorrer. Sou programador .Net e não manjo muito de PHP mas as aplicações tem que tratar suas varáveis de sessão isoladamente.


5. Re: Sessões em Php [RESOLVIDO]

Josenildo Cardoso
dungamaster

(usa Debian)

Enviado em 13/11/2012 - 08:45h

wdmatheus escreveu:

julianjedi escreveu:

Amigo as sessões ficam armazenadas localmente no computador cliente, para não permitir logins multiplos com o mesmo usuário vc deve criar alguma flag no banco de dados que qdo o usuario logar avisa que já está logado e não permite outro login **grosseiramente falando vc controla o estado de logado ou offline pelo banco de dados, mas isso pode ser um problema porque se por algum motivo o usuário não clicar em logout .. e pode ter certeza que ele não vai fazer isso .. a flag logado vai ficar setada no banco de dados, ai vc terá que fazer a sessão do banco de dados expirar a cada tempo, ou usar algum tipo de arquivo para controlar a sessão em um diretório temporário, enfim tem muitas maneiras de se fazer eh soh escolher uma linha de raciocínio e segui-la, mas com a $_SESSION não vai dar para controlar multiplos logins.


Sério mesmo Julian???

Dunga, o que fica armazenado localmente no cliente são coockies (do navegador). Sessões são armazenadas na memória do servidor da aplicação/sistema.


O meu caso, não é só um sistema, são dois sistemas com finalidades diferentes, mais nos dois sistemas ao fazer o login do usuario é criada uma variavel de sessão ex: $_SESSION['usuario']; eu uso essa variavel as vezes para ficar exibindo o nome do usuario no sistema, tipo: Ola Fulano, Bom dia Fulano, sendo assim caso eu faça login em um sistema, e ir no outro sistema e abri-lo, este segundo sistema ja carrega o valor da variavel 'usuario', esse é o conflito que falo.


Esses dois sistemas estão no mesmo diretório no servidor? Por exemplo:

Aplicação 1: http://localhost/sistemas/app1
Aplicação 2: http://localhost/sistemas/app2

Isso poderia estar fazendo que o servidor interpretasse as duas aplicações como uma. Mas isso não pode ocorrer. Sou programador .Net e não manjo muito de PHP mas as aplicações tem que tratar suas varáveis de sessão isoladamente.



Entao, as aplicações estao no mesmo diretório localhost/av e localhost/cp, será isso?
Quanto os Cookies e Sessões, você sabe qual a vantagem de cada um, ou os dois são a mesma coisa?
só muda o local onde ficam armazenados.




6. Re: Sessões em Php [RESOLVIDO]

Perfil removido
removido

(usa Nenhuma)

Enviado em 13/11/2012 - 09:40h

Então suas aplicações não estão no mesmo diretório. Como disse anteriormente o servidor deve ser capaz de isolar as aplicações e consequentemente suas respectivas sessões.

Quanto a diferença entre coockies e sessões as principais são trafego de rede e segurança. O coockie trafega na rede entre cliente e servidor, além de que o ideal ao se implementar autenticação armazenada em coockie é criptografar o mesmo.



7. Re: Sessões em Php [RESOLVIDO]

Diego Lepera
d_lepera

(usa Linux Mint)

Enviado em 13/11/2012 - 09:43h

Crie hosts virtuais no servidor para poder separar as aplicações...

Não é uma coisa dificil de fazer, aqui no fórum mesmo temum tutorial de como fazer hosts virtuais no linux.

Att,




8. Re: Sessões em Php [RESOLVIDO]

Juliano Giacomeli
julianjedi

(usa Arch Linux)

Enviado em 13/11/2012 - 17:36h

dungamaster escreveu:

wdmatheus escreveu:

julianjedi escreveu:

Amigo as sessões ficam armazenadas localmente no computador cliente, para não permitir logins multiplos com o mesmo usuário vc deve criar alguma flag no banco de dados que qdo o usuario logar avisa que já está logado e não permite outro login **grosseiramente falando vc controla o estado de logado ou offline pelo banco de dados, mas isso pode ser um problema porque se por algum motivo o usuário não clicar em logout .. e pode ter certeza que ele não vai fazer isso .. a flag logado vai ficar setada no banco de dados, ai vc terá que fazer a sessão do banco de dados expirar a cada tempo, ou usar algum tipo de arquivo para controlar a sessão em um diretório temporário, enfim tem muitas maneiras de se fazer eh soh escolher uma linha de raciocínio e segui-la, mas com a $_SESSION não vai dar para controlar multiplos logins.


Sério mesmo Julian???

Dunga, o que fica armazenado localmente no cliente são coockies (do navegador). Sessões são armazenadas na memória do servidor da aplicação/sistema.


O meu caso, não é só um sistema, são dois sistemas com finalidades diferentes, mais nos dois sistemas ao fazer o login do usuario é criada uma variavel de sessão ex: $_SESSION['usuario']; eu uso essa variavel as vezes para ficar exibindo o nome do usuario no sistema, tipo: Ola Fulano, Bom dia Fulano, sendo assim caso eu faça login em um sistema, e ir no outro sistema e abri-lo, este segundo sistema ja carrega o valor da variavel 'usuario', esse é o conflito que falo.


Esses dois sistemas estão no mesmo diretório no servidor? Por exemplo:

Aplicação 1: http://localhost/sistemas/app1
Aplicação 2: http://localhost/sistemas/app2

Isso poderia estar fazendo que o servidor interpretasse as duas aplicações como uma. Mas isso não pode ocorrer. Sou programador .Net e não manjo muito de PHP mas as aplicações tem que tratar suas varáveis de sessão isoladamente.



Entao, as aplicações estao no mesmo diretório localhost/av e localhost/cp, será isso?
Quanto os Cookies e Sessões, você sabe qual a vantagem de cada um, ou os dois são a mesma coisa?
só muda o local onde ficam armazenados.




Desculpa amigos .. errei feio mesmo tava meio dormindo na hora sei lah... o browser soh armazena o uid da session que eh perdido qdo limpamos os dados de navegação, mas de qquer maneira o resto que eu falei da pra se considerar.

Mas no seu caso, crie algumas colunas adicionais para identificar em qual app ele está logando ou ateh mesmo na propria session, $_SESSION['usuario']['app_id'] = $id;

ai vc verifica se esse id eh igual ao id da aplicação que vc está querendo acessar
ficaria algo do tipo

if(isset($_SESSION['usuario']) && $_SESSION['usuario']['app_id'] == id_do_seu_app){
//logado
}else{
unset($_SESSION['usuario']);

//redireciona para a tela de login da app atual
}


mais uma vez desculpa ai amigo não gosto de passar informações erradas, provavelmente tava com sono mas soh estava querendo ajduar. e vlw wdmatheus por me corrigir na proxima vez releio o a resposta 2 vezes antes de postar besteira.


9. Re: Sessões em Php [RESOLVIDO]

Josenildo Cardoso
dungamaster

(usa Debian)

Enviado em 14/11/2012 - 00:03h

Bem pessoal, para voces entenderem meu caso, fiz um pequeno exemplo:
Fiz uma página com esse código:
<?php

session_start();

$_SESSION['var'] = "valor";


?>

e uma segunda página em com esse código:

<?php

session_start();

echo $_SESSION['var'];


?>

Bem, independente do local onde eu coloco as paginas, ou na mesma pagina ou não,
quando eu abro a primeira pagina é declarado um valor a variavel de sessão var.

Depois de abrir a primeira, qualquer local em que eu abrir a segunda página ela ira exibir o conteudo da
variavel de sessao var que no caso esta com o conteudo "valor".

Queria saber se existe uma solução propria no php para destinguir as duas sessões, como escrevi acima, citei algumas maneiras de resolver esse problema mas quero saber se existe uma maneira do proprio php diferenciar as sessoes?






10. Re: Sessões em Php [RESOLVIDO]

Diego Lepera
d_lepera

(usa Linux Mint)

Enviado em 14/11/2012 - 00:21h

dungamaster escreveu:

Bem pessoal, para voces entenderem meu caso, fiz um pequeno exemplo:
Fiz uma página com esse código:
<?php

session_start();

$_SESSION['var'] = "valor";


?>

e uma segunda página em com esse código:

<?php

session_start();

echo $_SESSION['var'];


?>

Bem, independente do local onde eu coloco as paginas, ou na mesma pagina ou não,
quando eu abro a primeira pagina é declarado um valor a variavel de sessão var.

Depois de abrir a primeira, qualquer local em que eu abrir a segunda página ela ira exibir o conteudo da
variavel de sessao var que no caso esta com o conteudo "valor".

Queria saber se existe uma solução propria no php para destinguir as duas sessões, como escrevi acima, citei algumas maneiras de resolver esse problema mas quero saber se existe uma maneira do proprio php diferenciar as sessoes?





Como mensionei acima, você precisa criar hosts virtuais no servidor apache, pois dessa maneira o servidor (que por acaso é onde são armazenadas as sessões) entenderá que são 2 sistemas totalmente apartados.



11. Re: Sessões em Php [RESOLVIDO]

Juliano Giacomeli
julianjedi

(usa Arch Linux)

Enviado em 14/11/2012 - 05:08h

dungamaster escreveu:

Queria saber se existe uma solução propria no php para destinguir as duas sessões, como escrevi acima, citei algumas maneiras de resolver esse problema mas quero saber se existe uma maneira do proprio php diferenciar as sessoes?



Tem sim .. da pra usar o ini_set pra escrever a sessão em um arquivo diferente


<?php

ini_set("session.save_path", "/Users/julianjedi/Sites/sessions2/");
session_start();

echo $_SESSION['var'];


?>


espero que ajude



12. Re: Sessões em Php [RESOLVIDO]

Josenildo Cardoso
dungamaster

(usa Debian)

Enviado em 15/11/2012 - 08:53h

Obrigado a todos os que responderam!!
d_lepera na minha opnião, criar hosts virtuais é muito trabalho pra mim que nao tenho muito conhecimento, ja fiz alguns um tempo, mais achei bem complicado, mas é bom saber que isso é uma solução para o problema pois mesmo que eu tenha conflitos em fase de desenvolvimento eu vou estar ciente que assim que hospedar no dominio os conflitos irao acabar.

julianjedi, achei legal esse metodo onde podemos escolher o local onde se iniciará a sessão.



01 02



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts