1、前台登录用的form

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<form id='form_login' action="{:U('runLogin')}" method="post">
    <div class="row">
        <label class="field">登陆名
        </label>
        <div class="item">
            <input id="address" class="basic-input" name="uname" maxlength="70" size="46"/>
        </div>
    </div>
    <div class="row">
        <label class="field">密码
        </label>
        <div class="item">
            <input id="pwd" class="basic-input" type="password"  name="pwd" maxlength="70" size="46"/>
        </div>
    </div>
    <div class="row">
        <div class="item">
            <input type="checkbox" name='auto' class='auto' id='auto' checked='1'/>
            <label for="auto">记住我,下次自动登录</label>
        </div>
    </div>
    <hr class="hrline"/>
    <div class="row footer">
        <div class="item">
            <input class="loc-btn" type="button" id="submit_form" value="提交"/>
            <input class="lnk-flat" type="button" id="cancel_form" value="取消"/>
        </div>
    </div>
</form>

2、后台验证用户名密码,如果登录成功则写入session和cookie,如果cookie不设置失效时间,默认是关闭全部浏览器时失效

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public function runLogin(){
    if(!$this->isPost()){
        halt('页面不存在');
    }
    $uname=I('post.uname');
    $pwd=I('post.pwd','','md5');
    $auto=I('post.auto');
 
    $condition = array(
        'uname' => $uname,
        'pwd'=> $pwd
        );
    $user=M('User')->where($condition)->find();
    if($user){
        $uid=$user[id];
        if($user[nickname]){
            $uname=$user[nickname];
        }
        session('uid',$user[id]);
        session('uname',$uname);
        if($auto=='on'){
            cookie('uid',$uid,30*24*3600);
            cookie('uname',$uname,30*24*3600);
        }
        header('Content-type:text/html;Charset=UTF-8');
        redirect(__APP__);
    }else{
        header('Content-type:text/html;Charset=UTF-8');
        redirect(U('login'),2,'用户名或密码错误,正在跳转回登陆页...');
    }
}

3、首页控制器判断session或者cookie是否存在

1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
// 首页控制器
class IndexAction extends Action {
    public function index(){
        $data=session('uname');
        if($data){
            $this->data = $data;
        }else if(cookie('uname')){
            $this->data = cookie('uname');
        }
        $this->display();
    }
}

4、首页页面模板中,使用标签判断用户信息,显示不同的内容

1
2
3
4
5
6
7
8
9
<div id='login' class='right'>
    <empty name="data">
            <a href='{:U('Login/login')}'>登录</a>
            <a href='{:U('Login/register')}'>注册</a>
        <else/>
            <a href='#'>欢迎 {$data}</a>
            <a href='{:U('Login/logout')}'>注销</a>
    </empty>                 
</div>

5、注销登录

1
2
3
4
5
6
7
public function logout(){
    session('uid',null);
    session('uname',null);
    cookie('uid',null);
    cookie('uname',null);
    redirect(__APP__);
}

基于ThinkPHP的开发笔记3-登录功能(转)的更多相关文章

  1. Android学习笔记_65_登录功能本身没有任何特别

    对于登录功能本身没有任何特别,使用httpclient向服务器post用户名密码即可.但是为了保持登录的状态(在各个Activity之间切换时要让网站知道用户一直是处于登录的状态)就需要进行cooki ...

  2. ThinkPHP开发笔记-用户登录注册

    1.修改模块配置,Application/当前模块名/Conf/config.php <?php return array( //数据库配置信息 'DB_TYPE' => 'mysql', ...

  3. 实现基于dotnetcore的扫一扫登录功能

    第一次写博客,前几天看到.netcore的认证,就心血来潮想实现一下基于netcore的一个扫一扫的功能,实现思路构思大概是web端通过cookie认证进行授权,手机端通过jwt授权,web端登录界面 ...

  4. 《ArcGIS Runtime SDK for .NET开发笔记》--三维功能

    介绍 在ArcGIS Runtim SDK for .NET 10.2.6中,新添加了三维地图功能.在ArcGIS中,我们将三维地图称为Scene(场景),所以在Runtime SDK SDK for ...

  5. 齐博软件 著名的老牌CMS开源系统 X1.0基于thinkphp开发的高性能免费开源PHP开放平台齐博x1.0基于thinkphp框架开发的高性能免费开源系统 主推圈子 论坛 预定拼团分销商城模块

    齐博X1--标签变量大全 1.网站名称: {$webdb.webname} 2.网址: {$webdb[www_url]} {:get_url('home')} 3.网站SEO关键词: 首页:{$we ...

  6. 基于thinkphp的uploadify上传图功能

    php Action server端 <?php /*  * To change this template, choose Tools | Templates  * and open the ...

  7. JFinal使用笔记3-注册和登录功能开发记录

    首页 开源项目 问答 代码 博客 翻译 资讯 移动开发 招聘 城市圈 当前访客身份:游客 [ 登录 | 加入开源中国 ]   当前访客身份: 游客 [ 登录 | 加入开源中国 ] 软件   土龙 关注 ...

  8. 基于SpringBoot从零构建博客网站 - 整合ehcache和开发注册登录功能

    对于程序中一些字典信息.配置信息应该在程序启动时加载到缓存中,用时先到缓存中取,如果没有命中,再到数据库中获取同时放到缓存中,这样做可以减轻数据库层的压力.目前暂时先整合ehcache缓存,同时预留了 ...

  9. 基于IntelliJ IDEA开发工具搭建SSM框架并实现页面登录功能详细讲解二

    接: 接下来配置类 UserController package com.chatRotbot.controller; import com.chatRotbot.model.User; import ...

随机推荐

  1. [POI2012] BEZ-Minimalist Security

    一张n个点m条边的无向图,有点权有边权都是非负,且每条边的权值小于等于两个顶点的权值和,现在要将每个点减一个非负整数使得每条边权等于两个顶点的点权和,问最大修改代价和最小修改代价 思路神的一匹,完全想 ...

  2. 微信小程序获取用户信息,解密encryptedData 包括敏感数据在内的完整用户信息的加密数据

    package com.iups.wx.wxservice; import java.io.UnsupportedEncodingException; import java.security.Alg ...

  3. 【bzoj3170】[Tjoi2013]松鼠聚会(数学题)

    题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=3170 这道题要在n个点中求一个点使其他点到该点的切比雪夫距离最小. 有个结论:$ (x ...

  4. poj2349 Arctic Network - 最小生成树

    2017-08-04 16:19:13 writer:pprp 题意如下: Description The Department of National Defence (DND) wishes to ...

  5. JAVA中的数据存储(堆及堆栈)- 转载

    1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制.2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(对象可 ...

  6. TiDB 在摩拜单车的深度实践及应用

    一.业务场景 摩拜单车 2017 年开始将 TiDB 尝试应用到实际业务当中,根据业务的不断发展,TiDB 版本快速迭代,我们将 TiDB 在摩拜单车的使用场景逐渐分为了三个等级: P0 级核心业务: ...

  7. JVM安全退出(如何优雅的关闭java服务)

    https://tech.imdada.cn/2017/06/18/jvm-safe-exit/?utm_source=tuicool&utm_medium=referral 背景 用户:货都 ...

  8. Linux命令详解-ls

    Ls(list)命令是linux下最常用的命令.ls命令就是list的缩写缺省下ls用来打印出当前目录的清单如果ls指定其他目录那么就会显示指定目录里的文件及文件夹清单.通过ls 命令不仅可以查 ...

  9. WCF基础:绑定(一)

    WCF中的终结点(ServiceEndpoint)包含有三要素:地址(EndpointAddress),绑定(Binding),契约描述(ContractDescription)三要素:其中绑定的在整 ...

  10. MySQL 5.7.3.0 安装 全程截图

    前言: 下一个班快讲MySQL数据库了,正好把服务器里面的MySQL卸了重装了一下. 截个图,作为笔记.也正好留给需要的朋友们. 目录: 下载软件 运行安装程序 安装程序欢迎界面 许可协议 查找更新 ...