精华内容
下载资源
问答
  • 个s h a p e *不一定就是c i r c l e *,所以编译器在没有明确类型映射时并不允许我们完成一个向下 映射任务。当然可以用原有C风格类型映射或C + +静态映射(s t a t i c c a s t ,将在本章末介绍) 来强制...
  • 实例:简单用户认证 ...在我疑惑我们提供任何相当明显安全缺陷时,本实例关键点是向你说明Cake内部是如何工作,并允许你创建一个你自己拥有应用程序防弹衣。 Cake通过它ACL引擎控制访问...

    实例:简单的用户认证

    1

    大蓝图

    加入你是一个CakePHP新手,你应该会有很强的意愿复制和粘贴本代码,并在你的关键的,数据敏感处理产品应用程序中使用。抵制他们:本章是Cake内部的一个讨论,不具有应用安全性。在我疑惑我们提供任何相当明显的安全缺陷时,本实例的关键点是向你说明Cake的内部是如何工作的,并允许你创建一个你自己拥有的应用程序防弹衣。

    Cake通过它内建的ACL引擎控制访问,那么用户认证和持久性呢?他们又怎样呢?

    好,到目前为止,我们已经发现用户认证系统从一个应用到另外一个应用不停的在改变。像密码,其他,LDAP认证-以及大多数应用程序都有User model,他们之间仅仅只有细微差别而已。现在,我们把它留给你。它会改变吗?我们不太确定。目前我们认为将它构建到框架里的额外支出是不值得那么做的,因为使用Cake来创建你自己的用户认证是非常简单的。

    你需要3样东西:

    1.一种验证用户的方法(通常完成是通过验证一个用户名和密码组合的用户身份).

    2.一种持久跟踪用户的方法,因为他们引导你的应用程序(通常利用session完成)。

    3.一种检验一个用户已经通过认证的方法(也常常和session交互来完成)的方法。

    在本例中,我们将为一个客户管理系统创建一个简单的用户认证。这个虚构的应用程序很有可能被一个办公人员来跟踪联系人信息,以及客户的相关注释。本系统所有的功能会安排在我们的用户验证系统之后,除了一些少量的骨架以及公共安全的view,这些view仅显示存储在系统里的客户的名字以及职位。

    我们从如何验证一个试图访问系统的用户这里开始。使用CakeSession组件来存储通过验证的用户信息。一旦我们从session里得到用户信息,我们需要在应用程序里放入检查,以确保应用程序的用户不会进入他们不该去的地方。

    需要注意的一件事情是,身份验证和访问控制不一样。在本例后面的所有东西都是关于如何看那些人是否是他们所说的那些人,并且允许他们有访问部分应用程序的基本权利。如果你想好好的润色一下这个访问,参看Cake ACL那章。我们需要对ACL适合的地方做出一些说明,但是现在,还是让我们把注意力放在简单的用户认证吧。

    我也应该说这并不代表在应用程序安全性中,它是入门的。我们仅仅是想让你充分的利用它,以至你能够建立你自己的安全应用程序。

    2

    验证和持久

    首先,我们需要一种方法来存储那些想访问我们客户管理系统的用户的信息。我们正在使用的客户管理系统在一个数据库表中存储用户信息,可以使用下面的SQL语句来创建此数据库表:

    'users', 虚构的客户管理系统数据库

    CREATE TABLE `users` (

      `id` int(11) NOT NULL auto_increment,

      `username` varchar(255) NOT NULL,

      `password` varchar(32) NOT NULL,

      `first_name` varchar(255) NOT NULL,

      `last_name` varchar(255) NOT NULL,

      PRIMARY KEY  (`id`)

    )

    相当简单,对不对?此表的Cake Model也非常简单:

    <?php

    class User extends AppModel

    {

        var $name = 'User';

    }

    ?>

    我们需要的第一件东西就是一个登录view以及动作。它为应用程序用户提供一种方法来试图登录,并且也为系统提供一方法来处理信息,并看看他们是否被允许访问系统。view仅仅是一个HTML表单,并在CakeHTML Helper的帮助下创建:

    /app/views/users/login.thtml

    <?if ($error): ?>

    <p>The login credentials you supplied could not be recognized. Please try again.</p>

    <? endif; ?>

     

    <form action="<?php echo $html->url('/users/login'); ?>" method="post">

    <div>

        <label for="username">Username:</label>

        <?php echo $html->input('User/username', array('size' => 20)); ?>

    </div>

    <div>

        <label for="password">Password:</label>

        <?php echo $html->password('User/password', array('size' => 20)); ?>

    </div>

    <div>

        <?php echo $html->submit('Login'); ?>

    </div>

    </form>

    view展示了一个简单的登录表单供用户登录系统。本表单的动作是/users/login, 它在 UsersController里,看起来如下::

    /app/controllers/users_controller.php (部分)

    <?php

    class UsersController extends AppController

    {

        function login()

        {

            //Don't show the error message if no data has been submitted.

            $this->set('error', false);

     

            // If a user has submitted form data:

            if (!empty($this->data))

            {

                // First, let's see if there are any users in the database

                // with the username supplied by the user using the form:

     

                $someone = $this->User->findByUsername($this->data['User']['username']);

     

                // At this point, $someone is full of user data, or its empty.

                // Let's compare the form-submitted password with the one in

                // the database.

     

                if(!empty($someone['User']['password']) && $someone['User']['password'] == $this->data['User']['password'])

                {

                    // Note: hopefully your password in the DB is hashed,

                    // so your comparison might look more like:

                    // md5($this->data['User']['password']) == ...

     

                    // This means they were the same. We can now build some basic

                    // session information to remember this user as 'logged-in'.

     

                    $this->Session->write('User', $someone['User']);

     

                    // Now that we have them stored in a session, forward them on

                    // to a landing page for the application.

     

                    $this->redirect('/clients');

                }

                // Else, they supplied incorrect data:

                else

                {

                    // Remember the $error var in the view? Let's set that to true:

                    $this->set('error', true);

                }

            }

        }

     

        function logout()

        {

            // Redirect users to this action if they click on a Logout button.

            // All we need to do here is trash the session information:

     

            $this->Session->delete('User');

     

            // And we should probably forward them somewhere, too...

        

            $this->redirect('/');

        }

    }

    ?>

    并不是太坏:如果简单的话,login()动作的内容不会低于20行。本动作的结果要么是1:会将用户信息放入session,并前进到应用程序的主要页面,或者是2:返回到登录界面,并显示登录表单(并带有附加的错误信息).

    3

    访问应用程序的检验

    既然我们可以对用户进行身份验证,还是让我们实现它,以至应用程序可以剔出从其他地方试图进入系统的用户,而非登录界面和我们在前面提到的‘基本'客户目录。

    实现此的一种方法是在AppController里创建一个函数,此函数会为你进行session检查和踢出。

    /app/app_controller.php

    <?php

    class AppController extends Controller

    {

        function checkSession()

        {

            // If the session info hasn't been set...

            if (!$this->Session->check('User'))

            {

                // Force the user to login

                $this->redirect('/users/login');

                exit();

            }

        }

    }

    ?>

    现在你有一个可以在任何controller里使用的函数来确保用户在没有事先登录时,不可以访问controller动作。只要它正好是,你可以在任何级别上检查访问-这里是一些例子:

     Controller的所有动作前强制进行身份验证

    <?php

    class NotesController extends AppController

    {

        // Don't want non-authenticated users looking at any of the actions

        // in this controller? Use a beforeFilter to have Cake run checkSession

        // before any action logic.

     

        function beforeFilter()

        {

            $this->checkSession();

        }

    }

    ?>

    在单个Controller动作前强制进行身份验证

    <?php

    class NotesController extends AppController

    {

        function publicNotes($clientID)

        {

            // Public access to this action is okay...

        }

     

        function edit($noteId)

        {

            // But you only want authenticated users to access this action.

            $this->checkSession();

        }

    }

    ?>

    既然你有了基础,你可能想冒些险,实现一些在这里描绘的高级的,或者自定义的特性。与CakeACL组件集成或许是一个好的开端吧。

    Last Updated:2006年12月5日

    转载于:https://www.cnblogs.com/confach/articles/577371.html

    展开全文
  • excel使用

    2012-11-25 17:06:01
    这时先不要忙着把B列和C列删除,先要把D列结果复制一下,再用“选择性粘贴”命令,将数据粘贴到一个空列上。这时再删掉B、C、D列数据。下面是一个“&”实际应用例子。用AutoCAD绘图时,有人喜欢在EXCEL中存储...
  • 1.1文本框、按钮等控件测试1.1.1文本框的测试  1.1文本框、...  f,利用复制粘贴等操作强制输入程序不允许的输入数据;  g,输入特殊字符集,例如,NUL及\n等;  h,输入超过文本框长度的字符或文本,检查所输入的内
  • LINGO软件学习

    2009-08-08 22:36:50
    在主窗口内的标题为LINGO Model – LINGO1窗口是LINGO默认模型窗口,建立模型都都要在该窗口编码实现。下面举两个例子。 例1.1 如何在LINGO中求解如下LP问题: 在模型窗口中输入如下代码: min=2*x1+3*...
  • 有了在 Polarr 中复制粘贴编辑功能,您就可以做到这一点。在编辑面板中。你会发现一个名为“复制编辑”和“粘贴编辑”按钮。 定制滤镜 Polarr 包含超过 100 种高品质滤镜供您使用。这些滤镜可以用作编辑...
  • delphi 开发经验技巧宝典源码

    热门讨论 2010-08-12 16:47:23
    0206 如何在DBGrid中实现复制粘贴功能 137 0207 在DBGrid中将选中多行删除 137 0208 在DataGrid中如何使标题文字居中 138 0209 如何把ListBox中内容拖曳到另一个ListBox中 139 0210 把DBGrid中数据...
  • 0206 如何在DBGrid中实现复制粘贴功能 137 0207 在DBGrid中将选中多行删除 137 0208 在DataGrid中如何使标题文字居中 138 0209 如何把ListBox中内容拖曳到另一个ListBox中 139 0210 把DBGrid中数据...
  • 0206 如何在DBGrid中实现复制粘贴功能 137 0207 在DBGrid中将选中多行删除 137 0208 在DataGrid中如何使标题文字居中 138 0209 如何把ListBox中内容拖曳到另一个ListBox中 139 0210 把DBGrid中数据...
  • 0206 如何在DBGrid中实现复制粘贴功能 137 0207 在DBGrid中将选中多行删除 137 0208 在DataGrid中如何使标题文字居中 138 0209 如何把ListBox中内容拖曳到另一个ListBox中 139 0210 把DBGrid中数据...
  • 0206 如何在DBGrid中实现复制粘贴功能 137 0207 在DBGrid中将选中多行删除 137 0208 在DataGrid中如何使标题文字居中 138 0209 如何把ListBox中内容拖曳到另一个ListBox中 139 0210 把DBGrid中数据...
  • 0206 如何在DBGrid中实现复制粘贴功能 137 0207 在DBGrid中将选中多行删除 137 0208 在DataGrid中如何使标题文字居中 138 0209 如何把ListBox中内容拖曳到另一个ListBox中 139 0210 把DBGrid中数据...
  • java编写计算器,能实现加减乘除

    热门讨论 2010-12-24 13:56:14
    //不允许改变计算器大小 frame.setLocation(250,150);//设置计算器起始位置 frame.setBackground(Color.YELLOW); df = new DecimalFormat("0.##############"); //设置数据输出精度(对于double型值) ...
  • iPhone开发秘籍(第2版)--详细书签版

    热门讨论 2012-12-11 13:42:25
    1.8.6 应用程序束中存在文件 20 1.8.7 IPA归档 20 1.8.8 沙盒 20 1.9 编程范例 21 1.9.1 面向对象编程 21 1.9.2 模型—视图—控制器 22 1.10 小结 27 第2章 构建第一个项目 28 2.1 创建新项目 28 2.2 ...
  • iPhone开发秘籍(第2版)--源代码

    热门讨论 2012-12-11 13:51:22
    1.8.6 应用程序束中存在文件 20 1.8.7 IPA归档 20 1.8.8 沙盒 20 1.9 编程范例 21 1.9.1 面向对象编程 21 1.9.2 模型—视图—控制器 22 1.10 小结 27 第2章 构建第一个项目 28 2.1 创建新项目 28 2.2 ...
  • 不再需要复制粘贴,并且要在两个系统中搜索相同联系人艰巨任务。 CallHippo提供了市场上最好办公电话系统,可以节省您大量时间和精力,并使您能够专注于完成更多交易,并以更好方式为客户提供服务。 基于...
  • CuteFTP9简易汉化版

    2014-04-11 12:31:30
    查看文件夹属性和执行标准操作,如剪切、复制粘贴。 把你下载默认下载Folder-Specify默认文件夹。您还可以指定一个默认本地和远程文件夹为每个网站,所以当你连接,一种上传软件会自动切换到选定文件夹。 ...
  • 您也可以使用复制粘贴复制功能,以节省打字时间。键盘快捷方式,让您快速选择一个菜单选项或进入数值数据。许多数字输入领域,可以作为一个计算器:输入” 92.18 33.26 ” ,并观赏gnucash输入相应款项给你! ...
  • EditPlus 3.21绿色汉化版

    2011-03-30 20:04:58
    而它还有一个好用的功能,就是它有监视剪贴板的功能,能够同步于剪贴板自动将文字粘贴进 EditPlus 的编辑窗口中,让你省去粘贴的步骤。另外它也是一个非常好用的 HTML 编辑器,它除了支持颜色标记、HTML 标记,同时...
  • 而它还有一个好用的功能,就是它有监视剪贴板的功能,能够同步于剪贴板自动将文字粘贴进 EditPlus 的编辑窗口中,让你省去粘贴的步骤! 功能特色: 1. 启动速度快。这几乎是最令人欣赏的一项特性 ,我知道 UltraEdit...
  • C#编程经验技巧宝典

    热门讨论 2008-06-01 08:59:33
    104 <br>0171 如何只允许输入指定图片格式 105 <br>0172 如何设置录入图片统一图片大小 105 <br>5.4 数组处理技巧 105 <br>0173 如何转换数组类型 105 <br>0174 如何复制数组中一系列元素...
  • flash shiti

    2014-03-14 10:32:41
    35.Flash5允许使用Action功能有哪几种? A. Symbol B. Movie Clips C. Keyframe D. Button Symbol 36.以下语句说法正确有: A. getURL表示使浏览器浏览到指定页面 B. gotoAndPlay表示跳转到指定帧并播放 ...
  • Toad 使用快速入门

    2008-11-27 15:22:14
    从网络服务器读取Toad程序,在本地计算机安装一些自定义文件,并且创建到服务器文件快捷方式,一般推荐使用这个方式,而且要求网络服务器已经配置。 c) TOAD to Network Server 把Toad安装到网络服务器上,...
  • 设置安全特性以允许将系统活动记录到远程计算机 12-11 使用Diagnostics List 12-12 隐藏、显示和移动Diagnostics List 12-13 Diagnostics List中信息 12-14 查看FactoryTalk Diagnostics日志文件 12-14 在运行时...
  • 本工具相对于同类工具有破坏背景色、条件格式、复制粘贴和撤消功能之优点。 【高级背景选择】 背景着色高级功能,支持行着色、列着色、行与列同时着色共3种方式供选择。 快捷取数 【快捷取数列】 随存储格...

空空如也

空空如也

1 2 3 4
收藏数 73
精华内容 29
关键字:

不允许复制粘贴的内如何复制