谁能告诉我我写的这个程序错在哪里啊?#include <stdioh> void main() { int x,A,B,C; scanf("%d",x); if
函数TestPurview($n)虽然,看上去只是一个相对比较简单的函数,但是这个函数是非常非常重要的,试想一下如果一个系统中没有检验某个用
户是否有权限操作某些功能的话,那么,这个系统一定非常危险,因为,随便一个人都可以操作某个功能,例如,进入后台,删除栏目,删除数据库等,就如同一个
家四周都没有墙一样,随便什么人都可以进入,这样的家完全就是公共场合,完全没有什么安全可言,一个系统也是如此。
所以,检测系统函数就比较重要了,当然,光这个一个函数还不够,不光要检验用户的使用权限,还要检验用户密码,是不是管理员,甚至是用户登录ip等,都要检验一下,这样才可以称得上安全的系统。
本函数在“管理员登陆类”userloginclassphp里面的第一个函数就是它,返回的值是true或false,若有权限则返回trure否则返回false。
通过教程“织梦中cookie和session的应用”我们知道了,当我们登录后台后,织梦系统会把登录的用户信息写入session里面,并把session存放在/data/session文件夹里面。
因为不同的用户登录后台,产生的session是不一样的,我就在后台注册一个发布员,用户名为fby。并且,在后台定义“信息发布员”的权限如下图所示。
登录/注册后可看大图
我整理了一下“信息发布员”的权限如下:
列出授权栏目(t_AccList)
发布授权文档(a_AccNew)
列出授权文档(a_AccList)
列出我发布的文档(a_MyList)
修改我发布的文档(a_MyEdit)
删除我发布的文档(a_MyDel)
更改个人密码(sys_MdPwd)
评论管理(sys_Feedback)
管理我的上传(sys_MyUpload)
当我用fby用户名登录后,在data/session/文件夹里面,生成一个名为sess_3vtlqpg0pnlmc63pd5ai86gl16 的 session 。这个session里面的内容如下所示。
securimage_code_value|s:4:"npll";
dede_admin_id|s:1:"8";
dede_admin_type|s:1:"1";
dede_admin_channel|s:0:"";
dede_admin_name|s:3:"fby";
<font color="Blue">dede_admin_purview|s:107:"t_AccList
a_AccNew a_AccList a_MyList a_MyEdit a_MyDel sys_MdPwd sys_Feedback
sys_MyUpload plus_留言簿模块 ";</font>
dede_admin_style|s:10:"newdedecms";
复制代码
如果我们以超级管理员,也就是最高级别的身份登录后台后,我们同样得到类似的如下内容。
securimage_code_value|s:4:"2gsf";
dede_admin_id|s:1:"1";
dede_admin_type|s:2:"10";
dede_admin_channel|s:1:"0";
dede_admin_name|s:5:"admin";
<font color="Blue">dede_admin_purview|s:15:"admin_AllowAll ";</font>
dede_admin_style|s:10:"newdedecms";
复制代码
当登录后,这些是如何生成的?这个我们在上面提到了,以前的教程已经详细讲解了,其实,就是通过“管理员登陆类”userloginclassphp里面的函数来实现的,当然,不只是这个文件。
我们分析上面这些,完全就是为了函数TestPurview($n)作准备的,好了,现在我们来分析一下这个用户权限检验函数。
函数:
function TestPurview($n)
{
$rs = FALSE;
$purview = $GLOBALS['cuserLogin']->getPurview();
if(preg_match('/admin_AllowAll/i',$purview))
{
return TRUE;
}
if($n=='')
{
return TRUE;
}
if(!isset($GLOBALS['groupRanks']))
{
$GLOBALS['groupRanks'] = explode(' ',$purview);
}
$ns = explode(',',$n);
foreach($ns as $n)
{
//只要找到一个匹配的权限,即可认为用户有权访问此页面
if($n=='')
{
continue;
}
if(in_array($n,$GLOBALS['groupRanks']))
{
$rs = TRUE; break;
}
}
return $rs;
}
复制代码
通过getPurview()方法,我们从session得到了dede_admin_purview里面的值,因
为,$GLOBALS['cuserLogin']是实例化“登录类”的对像,而这个登录类的构造函数,在我们实例化时,已经把session里面的值赋
给了$this->userPurview,代码如下所示。
$this->userID = $_SESSION[$this->keepUserIDTag];
$this->userType = $_SESSION[$this->keepUserTypeTag];
$this->userChannel = $_SESSION[$this->keepUserChannelTag];
$this->userName = $_SESSION[$this->keepUserNameTag];
$this->userPurview = $_SESSION[$this->keepUserPurviewTag];
$this->adminStyle = $_SESSION[$this->keepAdminStyleTag];
复制代码
从上面代码我们就不难发现$this->userPurview=$_SESSION['dede_admin_purview'],即
t_AccList a_AccNew a_AccList a_MyList a_MyEdit a_MyDel sys_MdPwd
sys_Feedback sys_MyUpload plus_留言簿模块这些值,明白了这一点,这个TestPurview($n)就简单多了。
1、条件判断:
if(preg_match('/admin_AllowAll/i',$purview))
{
return TRUE;
}
复制代码
如果我们用的是管理员登录,那么,$_SESSION['dede_admin_purview']的值等于admin_AllowAll,返回true,所以,这句代码就是判断是不是管理登录。
2、条件判断
if($n=='')
{
return TRUE;
}
复制代码
若参数为空,直接返回true,也就是说,只要不提供功能参数,就认为是可以操作的,所以,这一点要注意了,如果你不小心,忘记写参数,那么,很可能本想过虑掉的用户结果没有过虑掉,这是非常危险的,所以,这个最好有个提示,有个对话框,这样可以提醒管理员。
3、把登录的后台的用户的权限,例如,本例子中的“信息发布员”权限$_SESSION['dede_admin_purview'],转换成数组存放到全局变量$GLOBALS['groupRanks']里面,以备下面之用。
if(!isset($GLOBALS['groupRanks']))
{
$GLOBALS['groupRanks'] = explode(' ',$purview);
}
复制代码
4、把功能参数转换成数组:$ns = explode(',',$n);
5、遍历:foreach($ns as
$n),就是把传递过来的功能参数,通过in_array($n,$GLOBALS['groupRanks'])这个函数进行对比,看一下$n里面的有
没有存功能在数组$_SESSION['dede_admin_purview']里面。例如:本例子信息发布员的权限在上我们已经知道了
有:t_AccList a_AccNew a_AccList a_MyList a_MyEdit a_MyDel sys_MdPwd
sys_Feedback sys_MyUpload plus_留言簿模块这些值。
如果$n是:a_AccNew,t_New,经过上面一个遍历,我们发现,其中a_AccNew在数
组$GLOBALS['groupRanks'],函数立马跳出来,返回一个true,也就是说织梦的这个函数,只要$n里面有一个是
与$GLOBALS['groupRanks']里面的值一样,
就可以操作这个页面。而不需要全部都在$GLOBALS['groupRanks']里面才可以操作这个页面。
当然,你可以根据自己需要,直接严格匹配,只有全部都在登录用户的权限里面才可以操作页面。这个功能也简单,只要作如下更改:
if(!in_array($n,$GLOBALS['groupRanks']))
{
$rs = FALSE; break;
}
复制代码
也就是把$n参数里面的值判断一下,只要有一个不在登录用户的权限里面,就返回false,退出操作。
在做SEO优化的过程中,网页代码中的Meta标签可以说对网站的关键词排名有着举足轻重的地位,如果SEO人员能在Meta标签上进行了适合搜索引擎的撰写方式,可在很大程度地提升网站的排名,同时也有利于站点内容的收录,所以给每个网页加上Meta值就成为了SEO中必不可少的工作之一。
Meta标签指的是网页HTML文件里面的一些文件标签,其中最重要的是:标题标签Title、描述标签Description和关键词标签Keyword,当然,如果你喜欢的话,还可以放上你想放的信息,比如象作者,软件版本等等,但是不能太多,因为前面标签放的太多,就会把你的网页正文内容推到文件的后面去了,这对于优化排名很不利。
1、什么是Meta标签?
Meta是HTML语言head区的一个辅助性标签,用来在HTML文档中模拟HTTP协议的响应头报文,META标签用来描述一个HTML网页文档的属性,例如作者、日期和时间、网页描述、关键词、页面刷新等。
搜索引擎一般使用机器人自动查找Meta值来给网页分类,它的属性有两种:name和http-equiv。
name属性主要用于描述网页,对应于content(网页内容),以便于搜索引擎机器人查找、分类。
除了便于搜索引擎的索引,Meta其实也是一种规范的网页标准,只有完善了Meta,一个HTML页面才能算是完整的网页。
通常,Meta值在网页中是以以下的方式存在的:
<META NAME="Title" CONTENT="网页标题">
<META NAME="Author" CONTENT="网页的作者说明">
Meta还有很多种表述功能,比如在网页中加入SEO所需要的关键词以及描述等多种信息。
2、Meta标签的作用
META标签是HTML标记HEAD区的一个关键标签,它位于HTML文档的<head>和<title>之间(有些也不是在<head>和<title>之间),它提供的信息虽然用户不可见,但却是文档的最基本的元信息,<meta>除了提供文档字符集、使用语言、作者等基本信息外,还涉及对关键词和网页等级的设定。
所以有关搜索引擎注册、搜索引擎优化排名等网络营销方法内容中,通常都要谈论META标签的作用,我们甚至可以说,META标签的内容设计对于搜索引擎营销来说是至关重要的一个因素,合理利用Meta标签的Description和Keywords属性,加入网站的关键字或者网页的关键字,可使网站的SEO优化排名快速提升,并且更加贴近用户体验。
从HTML代码实例中可以看到,一段代码中有3个含有meta的地方,并且meta并不是独立存在的,而是要在后面连接其他的属性,如description、Keywords、http-equiv等。
3、了解Meta的重要参数
对于做SEO的人来说,最看重的就是网页的title了,title即一个网页的标题,这是网页最为重要的部分,目前搜索引擎对网页的排名也大部分基于这个参数进行(至于其他的因素,大家可参考一下马海祥博客《如何利用SEO技术来做网站页面优化》的相关介绍)。
在大多数网站中,除了页面标题之外,比较常见的并且与SEO有着直接联系的Meta标签还有以下几种:
Keywords:页面的关键词标签,这个标签可以用于提取网站的关键词信息,在SEO中较为重要。
Description:网站内容描述标签,它是对整个网页内容的一种概述,用以说明该网页的大体内容。
Robots:这个标签用来告诉搜索引擎的机器人,也就是自动地抓取网页的程序文件,说明哪些页面需要索引,哪些页面不需要索引。
参数有all、none、index、noindex、follow、nofollow,分别表示是否能收录该页面,该标签最为重要,设置稍有不慎就可能造成搜索引擎停止收录的后果。
在这里,马海祥提醒各位SEO人员需要注意的是:标题的填写一定要基于页面的实际内容进行,最好是该网页内容的一个具体描述,不要设置为栏目名称或者网站名称,如果是首页文件,则需要避免以类似“网站首页”这样的内容命名,最好用网站的名称来命名。
4、Meta标签的SEO设置
对于我们搜索引擎优化来说,最为重要的标签大家已经了解了,但具体应该如何优化这些标签呢?下面,我们就来具体说明。
(1)、网页描述Description
网页的描述要根据网站的实际内容填写,很多站长会随意填写网站的描述,或者在描述中大量堆砌关键词,这些都是对SEO不利的行为,例如一个以SEO知识和资讯为主的站点,它的描述Meta标签可以这样写:
<META NAME="Description" CONTENT="马海祥博客为大家提供SEO优化知识、最新SEO技巧、SEO软件下载等丰富实用信息。">
这样的描述不仅概括了整个网站的内容,也突出了软件这一关键词,而类似“某某网站是最好的门户”、“某某网站为您服务”这样的描述,就由于忽略了网站的主要关键词,而让搜索引擎摸不着头脑。
(2)、网页关键词Keywords
与META标签中的"description"类似,"Keywords"也是用来描述一个网页的属性,只不过要列出的内容是“关键词”,而不是网页的介绍,这就意味着,要根据网页的主题和内容选择合适的关键词(具体可查看马海祥博客《如何从优化的角度选择网站的关键词》的相关介绍)。
对此,马海祥建议各位SEO人员在选择关键词时,除了要考虑与网页核心内容相关之外,还应该是用户易于通过搜索引擎检索的,过于生僻的词汇不太适合做META标签中的关键词。
由于网页关键词由于一直被大量地用于优化,目前它对于搜索引擎的重要性已经不如以前了,但是完善网页的关键词标签仍然可以起到一定的作用。
同样以一个SEO知识网站为例,它的关键词可以这样写:
<META NAME="Keywords" CONTENT="新手学SEO,SEO基础知识、SEO应用、SEO学习">
往往我们会采用大而全的关键词来描述,诸如“SEO”“SEO技巧”等非常热门的关键词,但是对于大多数站点来说,使用类似的关键词对提升排名不会有任何效果,因为这类关键词的搜索量很大,而只有权重非常高的门户网站才有可能获得这类词较好的排名。
5、将Meta应用到网站
在我们美化好Meta标签后,最重要的一步就是应用到网站了,对于静态页面来说,直接在网页源代码的<head>标签中加上Meta即可。
而对于采用CMS开源程序建站的网站来说,可以直接在网站的管理后台增加标签,例如dedeCMS系统,就可以直接进入后台的“系统基本参数”设置关键词和简介内容。
马海祥博客点评:
近两三年来,大部分人都相信,搜索引擎会给予标题标签比较高的权重,但是描述标签和关键词标签,搜索引擎有可能会把描述和关键词标签做为排名的一个很小的因素,但所占的分量应该非常低,甚至会完全忽略。
正因为如此,很多搜索引擎优化从业者,基本上不在标签上放任何精力,实际上,马海祥觉得这也有点矫枉过正,有迹象表明,Google就算不把说明和关键词标签当做排名的因素,Google也会把这些标签抓取到数据库中,最明显的是,比如一个完全用flash做成的网站,这个网站的搜索排名中所使用的说明文字,一般就是从说明标签中抓取出来的。
同时,既然所有的搜索引擎排名算法都是保密的,而且是不断变换的,谁也不敢保证,今后搜索引擎都一直不看重这些标签,很有可能描述和关键词标签,一直都是排名算法的因素之一,只是比重占的很小而已。
所以,马海祥的建议是,每一个网页都应该认真写出好的标题,关键词和描述标签,至少它也没有坏处。
//你这里错了: scanf("%d",x);
//输入时 x前面应加 & 即:scanf("%d",&x);
//就是必须要加的:
#include <stdioh>
void main()
{
int x,A,B,C;
scanf("%d",&x);
if(x>=90)
printf("A");
else
if(x>=60)
printf("B");
else
printf("C");
getch();
}
网站模板库 » 谁能告诉我我写的这个程序错在哪里啊?#include <stdioh> void main() { int x,A,B,C; scanf("%d",x); if
0条评论