Ir para conteúdo
ggbelgamo

Valor da @Url.Action de acordo com usuário logado

Recommended Posts

Como posso alterar o valor do item do meu menu se tiver um usuário logado? Tentei verificar a existência da sessão na controller, mas não sei como posso retornar dados pra layout.cshtml.

 

Meu código está assim: 

                <ul id="menu-normal">
                    <li class="hover-menu"><a href="@Url.Action("Index", "Home")">INÍCIO</a></li>
                    <li class="hover-menu"><a href="@Url.Action("Aniversariantes", "Home")">ANIVERSARIANTES</a></li>
                    <li class="hover-menu"><a href="@Url.Action("CRM", "Home")">CRM</a></li>
                    <li class="hover-menu"><a href="">PARTICIPANTES</a></li>
                    <li class="hover-menu"><a href="">TURMAS</a></li>
                    <li class="btn-login"><a href="@Url.Action("Login", "Home")">LOGIN</a></li>
                </ul>

Queria que quando o usuário estivesse logado, exibisse "Painel" ao invés de "Login" continuar exibindo "Login" caso não tenha nenhum usuário logado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verifico se tem cookie salvo no browser.

 

            var verCookie = Request.Cookies.Get(GerarHashMd5("idUser"));

            if (verCookie == null)
            {
                return View("Login");
            }

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por Jonas Ribeiro Nascimento
      Estou criando meu próprio mvc php para adquirir mais conhecimento.
      Mas estou me deparando com uma coisa muita estranha, eu perco a $_SESSION de uma view para outra view
      Fiz um codigo simples pra testar.a.php ----- view a.php
      <?php session_start(); $_SESSION['teste'] = 'Funcionou'; echo $_SESSION['teste']; ?> <?php session_start(); echo $_SESSION['teste']; // Notice: Undefined variable: _SESSION in var_dump($_SESSION); // Notice: Undefined variable: _SESSION in NULL ?> <?php namespace Sis\Classes; use App\Model\ClassLogin; use Sis\Traits\TraitGetIp; class ClassSession { private $login; private $timeSession = 1200; private $timeCanary = 300; public function __construct(){ if(session_id() == ''){ ini_set("session.save_handler", "files"); //Cabeçalhos somente atraves de arquivos ini_set("session.use_cookies", 1); //Habilita o uso de cookies ini_set("session.use_only_cookies", 1); //Só pode habilitar a seção atraves de coockies ini_set("session.cookie_domain", DOMAIN); //Só aceita coockies vindo do nosso sistema ini_set("session.cookie_httponly", 1); //Só aceita script php e não deixa o javascript alterar o sistema if(DOMAIN != "localhost"){ ini_set("session.cookie_secure", 1); //Para trabalhar com o SSL do servidor ativo } /*Criptografia das nossas sessions*/ ini_set("session.entropy_length", 512); // ini_set("session.entropy_file","/dev/urandom"); ini_set("session.hash_function", "sha256"); ini_set("session.hash_bits_per_character", 5); session_start(); } $this->login = new ClassLogin(); } #Proteger contra roubo de sessão public function setSessionCanary($par=null){ session_regenerate_id(true); if($par == null){ $_SESSION['canary']=[ "birth" => time(), "IP" => TraitGetIp::getUserIp() //Pega o ip do usuario ]; }else{ $_SESSION['canary']['birth']=time(); } } #Verificar a integridade da sessão public function verifyIdSessions(){ if(!isset($_SESSION['canary'])){ $this->setSessionCanary(); } if($_SESSION['canary']['IP'] !== TraitGetIp::getUserIp()){ $this->destructSessions(); $this->setSessionCanary(); } if($_SESSION['canary']['birth'] < time() - $this->timeCanary){ $this->setSessionCanary("Time"); } } #Setar as sessões do nosso sistema public function setSessions($Email){ $this->verifyIdSessions(); $_SESSION['Login'] = true; $_SESSION['Time'] = time(); $_SESSION['Nome'] = $this->login->getIssetSession($Email)['data']['Nome']; $_SESSION['Email'] = $this->login->getIssetSession($Email)['data']['Email']; $_SESSION['Permissoes'] = $this->login->getIssetSession($Email)['data']['Permissoes']; } #Validar as páginas internas do sistema public function verifyInsideSession(){ $this->verifyIdSessions(); if(!isset($_SESSION['Login']) || !isset($_SESSION['Permissoes']) || !isset($_SESSION['canary'])){ $this->destructSessions(); header("Location: ".DIRPAGE."NaoAutorizado"); }else{ if($_SESSION['Time'] >= time() - $this->timeSession){ $_SESSION['Time']=time(); }else{ $this->destructSessions(); header("Location: ".DIRPAGE."NaoAutorizado"); } } } #Destruir as sessions existentes public function destructSessions(){ foreach (array_keys($_SESSION) as $key) { unset($_SESSION[$key]); } } #testar public function testarSessions(){ echo 'oiiiiiiiiiiiiiiiiiiiiiiooooooooooo'; } }

    • Por thewesker
      Estou escrevendo uma aplicação MVC em PHP e a estrutura de diretórios é a seguinte:
      - root ¬ app ¬ controllers ¬ models ¬ views ¬ core ¬ config ¬ public Na pasta “app” fica as camadas MVC. Em “controllers” coloco classes que vão receber dados e acionar models e/ou renderizar views. Nos “models” coloco basicamente as entidades do banco de dados e suas operações. Em “views” coloco as páginas com código html + php para exibição de dados No “core” coloco classes e/ou arquivos genéricos (tenho planos de usar essa mesma base para desenvolver outras aplicações futuramente, uma espécie de microframework.) No entanto surgiu duas classes um pouco diferentes, uma delas trabalha com datas e realiza operações como conversão e cálculo entre datas, a outra cria e gerencia múltiplas threads. Tenho dúvida em qual camada devo colocá-las, já que nenhuma delas fazem acesso a banco de dados ou arquivos e nem emite saídas, apenas retornam valores.
       
      Devo criar uma camada adicional? Qual? Devo colocá-la em um das camadas já existentes?  
      Obs: qualquer informação adicional que possa ser útil é sempre bem-vinda!
    • Por Wesley Balestrini
      Caros, bom dia.
      Fiquei com dúvida, mas acho que estou postando no local correto.
       
      Sou iniciante no desenvolvimento Web (front e back). Gostei muito do padrão MVC (PHP) e por isso descobri a existência do Cake PHP.
       
      Percebi grande dificuldade em usar estas formas de programar, principalmente por não entender muito de orientação a objeto. Por isso estou fazendo um curso sobre.
       
      Mas ainda resta dúvidas: um iniciante DEVE usar padrões (acho que sim) como MVC e frameworks (não tenho certeza) como CakePHP?
       
      Principalmente no caso de frameworks, me dá a sensação que estou deixando de aprender certas partes da linguagem, pois o framework faz elas por mim. Sei que são importantes para ganho de tempo e otimização, mas como iniciante tenha meus receios.
       
      Alguém pode me ajudar? Conte sua experiência do início de carreira.
    • Por Jonas Ribeiro Nascimento
      Ola a todos e agradeço desde já
      Tenha a classe de validação do form onde pega todos os erros do form:
      // Validação final do cadastro public function validateFinalCadastro($arrVar) { if(count($this->getErro())>0){ $arrResponse=[ "retorno"=>"erro", "erros"=>$this->getErro() ]; }else{ $arrResponse=[ "retorno"=>"success", "erros"=>null ]; } return json_encode($arrResponse, JSON_UNESCAPED_UNICODE); } Aqui tenho o Controller que passa para view:
      public function teste() { //echo 'esse é um teste'; $this->recVariaveis(); $validate = new ClassValidate(); $validate->validateFields($_POST); $validate->validateEmail($this->Email); $validate->validateIssetEmail($this->Email); $validate->validateData($this->DataNascimento); $validate->validateCpf($this->Cpf); $validate->validateConfSenha($this->Senha,$this->SenhaConf); $validate->validateStrongSenha($this->Senha); $validate->validateCaptcha($this->gRecaptchaResponse); $validate->validateFinalCadastro($this->arrVar); } Se eu dar um echo, print ou vardump na $validate->validateFinalCadastro($this->arrVar); consigo passar ela pra view e apresentar o erro ...ele apresenta depois do fechamento do html da pagina...
      {"retorno":"erro","erros":["Email já cadastrado!","Utilize uma senha mais forte!","Sistema de segurança foi ativado! Atualize a página e tente novamente ou aguarde mais um pouco."]}
      Aqui esta o ajax sem datatype: 'json'
      Sem datatype: 'json' eu entro no success reponse mais caio no else, porque o response.retorno esta sem o datatype: 'json'.
      $('#FormCadastroClientes').on('submit', function(event){ event.preventDefault(); var dados=$(this).serialize(); console.log(dados); $.ajax({ url: getRoot()+'CadastroClientes/teste', type: 'post', contentType: "application/x-www-form-urlencoded;charset=UTF-8", data: dados, success: function (response) { $('.retornoCad').empty(); if(response.retorno == 'erro'){ getCaptcha(); $.each(response.erros,function(key,value){ $('.retornoCad').append(value+''); }); }else{ $('.retornoCad').append('Dados inseridos com sucesso!'); } }, error: function (response, jqXHR, request, status, errorThrown, erro) { console.log(response); //alert(dados); console.log(dados); //alert(jqXHR); console.log(jqXHR); //alert(request); console.log(request); //alert(status); console.log(status); //alert(errorThrown); console.log(errorThrown); //alert(erro); console.log(erro); }, complete: function (jqXHR, textStatus) { //colocar aqui algo que deseja que faça ao terminar todo o processo (finnaly) } }); Ajax com datatype: 'json' nao consigo entrar no success ele já cai no erro
      $('#FormCadastroClientes').on('submit', function(event){ event.preventDefault(); var dados=$(this).serialize(); console.log(dados); $.ajax({ url: getRoot()+'CadastroClientes/teste', type: 'post', dataType: 'json', data: dados, success: function (response) { $('.retornoCad').empty(); if(response.retorno == 'erro'){ getCaptcha(); $.each(response.erros,function(key,value){ $('.retornoCad').append(value+''); }); }else{ $('.retornoCad').append('Dados inseridos com sucesso!'); } }, error: function (response, jqXHR, request, status, errorThrown, erro) { console.log(response); //alert(dados); console.log(dados); //alert(jqXHR); console.log(jqXHR); //alert(request); console.log(request); //alert(status); console.log(status); //alert(errorThrown); console.log(errorThrown); //alert(erro); console.log(erro); }, complete: function (jqXHR, textStatus) { //colocar aqui algo que deseja que faça ao terminar todo o processo (finnaly) } }); Observações: - Consigo inserir no banco tudo ok. - Consigo apresentar o rertun json_encode direto na view - Consigo entrar no success do ajax sem usar datatype: 'json' não entro no if para ler o array mais entro no else.
      Eu recebo esse erros no console.log
      No response eu teria que receber o return do json_encode e não recebo. O que eu recebo é o html da view.
      O ajax esta esperando um retorno em json e nao o html da pagina.
      parsererror SyntaxError: "JSON.parse: unexpected character at line 1 column 1 of the JSON data"
      Obrigado a todos.....atecipadamente
       
       
    • Por PeeWee
      Pessoal, estou precisando de um código que mantenha o usuário logado no sistema, pois o interessante é que assim que ele acessar o site nao precise logar outra vez. Estou utilizando esse código:   $_SESSION['log_me_out_at'] = strtotime(date("Ymd ")."23:59:59");
      aparentemente nao funciona quando subi para o servidor, alguem tem uma dica?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.