PHP中使session可以跨窗口运行的方法
这本来是session的基本用法,但在php中就不灵了。不过我们可以把session变量注册成"跨窗口的全局变量"。但这有一个条件,就是要向需要使用该session变量的窗口发送变量名为session_name(),值为session_id()的变量,用表单或者在url后面用?带上都可以.并且在使用session变量的页面的一开始处调用session_start()。
例子如下:
login.php文件:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>登陆画面</title>
</head>
<body>
<form action="result.php" method="post">
<table width="100%" border="0">
<tr>
<td align="center" valign="middle"><p>测试系统-----登陆画面</p>
<table width="250" style="border-collapse:collapse; border-color:#000000"
border="1" cellpadding="2" cellspacing="2">
<tr>
<td width="30%">用户:</td>
<td><input name="username" type="text" style="width:150px"/></td>
</tr>
<tr>
<td>密码:</td>
<td><input name="password" type="password" style="width:150px"/></td>
</tr>
<tr>
<td colspan="2" align="center"><input type="submit" value="登陆"/></td>
</tr>
</table>
</td>
</tr>
</table>
</form>
</body>
</html>
result.php文件:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>结果画面</title>
</head>
<body>
<form method="post">
欢迎你,
<?php
@session_start();
if(isset($_POST["username"])){
$username = htmlspecialchars($_POST["username"]);
$_SESSION[''username''] = $username;
} else {
$username = $_SESSION[''username''];
}
echo $username;
?>
<br/>
<br/>
<a href="login.php">返回</a>
<a href="database.php?".session_name()."=".session_id()."">数据库测试</a>
</form>
</body>
</html>
database.php文件:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>结果画面</title>
</head>
<body>
<form method="post">
Email:
<?php
@session_start();
$conn = mssql_pconnect(''localhost'', ''sa'', ''sa'');
mssql_select_db(''netstore'');
$query = mssql_query(''select * from CUSTOMER'', $conn);
$name = mssql_result($query, 0, ''email'');
echo $name;
?>
<br/>
<br/>
<a href="result.php?".session_name()."=".session_id()."">返回</a>
</form>
</body>
</html>
由一条别人adodb的bug引发的思考
echo 09," => (09) <br>";
echo 9," => (9) <br>";
你可以试一下.输出结果是:
0 => (09)
9 => (9)
而不是
09 => (09)
9 => (9)
这个译者做了下测试,经过分析得出.0开头的数字会被当成8进制,0x开头的会被当成16进制,如下:
echo 0x11," => (011) <br>";
echo 010," => (010) <br>";
这个会输出:
17 => (011)
8 => (010)
当然是10x16+1=17
1x8+0=8
OK.
Someone reported a bug in ADOdb, the open source db library i maintain. I went crazy for half an hour until i realised the problem. Here''s a little gotcha you can try:
echo 09," => (09) <br>";
echo 9," => (9) <br>";
If you expect the above code to produce the same values, you are sadly mistaken. Try it. I will post a followup later :)
PHP中自增自减运算
问题:若$i=2,求表达式($i++)*($i++)*($i++)的值,并求$i的值
答案:($i++)*($i++)*($i++)结果为24,$i为5
分析:先看计算顺序,发现有括号则先算括号里面的,先取$i的值2为($i++)的值,然后$i自加为3; [此时($i++)左=2,$i=3]
再算括号中,先取此时的$i的值3为($i++)的值,然后$i再自加为4;[此时($i++)中=3,$i=4]
后算括号右,先取此时的$i的值4作为($i++)的值,然后$i再自加为5
最后做乘法运算,即2*3*4=24 $i=5
Jakarta Struts结构移植过来的PHP开发框架,使用面向对象的开发结构和API,模拟了一个HTTP Servlet容器和使用了PHP服务页面引擎技术。
下载地址:http://mojavelinux.com/projects/studs/
文件结构如下:
如上图,WEB-INF中的文件都是Studs框架的核心文件(尤其是lib和tld下的文件),其中:
1.messages.properties文件:
welcome.title=Studs :: Welcome
welcome.heading=Welcome to Studs!
welcome.message=The application has been successfully installed!
pageviews.message=This page has been viewed <strong>{0}</strong> times.
2.struts-config.xml文件:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN"
"http://jakarta.apache.org/struts/dtds/struts-config_1_2.dtd">
<!--
This is a basic Studs/Struts configuration file with an example
welcome action/page and other commented sample elements.
-->
<struts-config>
<!-- example configuration of a database connection
<data-sources>
<data-source type="horizon.sql.BasicDataSource">
<set-property
property="description"
value="Primary data source for localhost database"/>
<set-property
property="driverClassName"
value="horizon.sql.drivers.MySQLDriver"/>
<set-property
property="username"
value="user"/>
<set-property
property="password"
value="secret"/>
<set-property
property="url"
value="mysql://localhost/dbname"/>
</data-source>
</data-sources>
-->
<form-beans>
<!-- sample form bean descriptor for an ActionForm
<form-bean
name="inputForm"
type="app.InputForm"/>
-->
</form-beans>
<global-exceptions>
<!-- sample exception handler
<exception
key="expired.password"
type="app.ExpiredPasswordException"
path="/changePassword.jsp"/>
-->
</global-exceptions>
<global-forwards>
<!-- Default forward to "welcome" action -->
<forward name="welcome" path="/welcome.do"/>
</global-forwards>
<action-mappings>
<!-- Default "welcome" action -->
<action path="/welcome" forward="/pages/welcome.psp"/>
<action path="/example" forward="/pages/example.psp"/>
<!-- sample input and input submit actions
<action
path="/Input"
type="org.apache.struts.actions.ForwardAction"
parameter="/pages/Input.jsp"/>
<action
path="/InputSubmit"
type="app.InputAction"
name="inputForm"
scope="request"
validate="true"
input="/pages/Input.jsp"/>
<action
path="/edit*"
type="app.Edit{1}Action"
name="inputForm"
scope="request"
validate="true"
input="/pages/Edit{1}.jsp"/>
-->
</action-mappings>
<controller locale="false" inputForward="true"/>
<message-resources parameter="/WEB-INF/messages.properties"/>
</struts-config>
3.web.xml文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>Studs Basic Application</display-name>
<description>A bare-bones foundation for creating a web application based on the Studs MVC Framework+</description>
<context-param>
<!-- if controlAllResources is set, all files should be handled by the stratus
container, including all non-php/html files -->
<param-name>controlAllResources</param-name>
<param-value>false</param-value>
</context-param>
<!-- Servlet Definitions -->
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>stratus.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>phase</servlet-name>
<servlet-class>phase.servlet.PhaseServlet</servlet-class>
<init-param>
<param-name>scratchdir</param-name>
<param-value>/WEB-INF/work</param-value>
</init-param>
<init-param>
<param-name>tldresourcedir</param-name>
<param-value>/WEB-INF/tld</param-value>
</init-param>
<init-param>
<param-name>ignoreEL</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>studs.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>validating</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
<!-- Servlet Mappings -->
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>phase</servlet-name>
<url-pattern>*.psp</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<!-- Mime Type Mappings -->
<mime-mapping>
<extension>html</extension>
<mime-type>text/html</mime-type>
</mime-mapping>
<mime-mapping>
<extension>css</extension>
<mime-type>text/css</mime-type>
</mime-mapping>
<mime-mapping>
<extension>js</extension>
<mime-type>text/javascript</mime-type>
</mime-mapping>
<mime-mapping>
<extension>png</extension>
<mime-type>image/png</mime-type>
</mime-mapping>
<mime-mapping>
<extension>jpg</extension>
<mime-type>image/jpeg</mime-type>
</mime-mapping>
<mime-mapping>
<extension>jpeg</extension>
<mime-type>image/jpeg</mime-type>
</mime-mapping>
<mime-mapping>
<extension>gif</extension>
<mime-type>image/gif</mime-type>
</mime-mapping>
<!-- Default Welcome File List -->
<welcome-file-list>
<welcome-file>index.psp</welcome-file>
</welcome-file-list>
</web-app>
4.文件build.xml:
<?xml version="1.0"?>
<project name="Studs Basic" basedir="../.." default="package">
<property file="../../build.properties" />
<target name="package" depends="prepare">
<mkdir dir="../../${release.dir}/${project.release.version}"/>
<tar destfile="../../${release.dir}/${project.release.version}/studs-basic-${project.release.version}.tar.gz" compression="gzip">
<tarfileset dir="." prefix="studs-basic" defaultexcludes="yes">
<exclude name="classes/build.xml"/>
<exclude name="**/TODO"/>
<exclude name="**/NOTES"/>
</tarfileset>
</tar>
</target>
<target name="clean">
<!-- make sure to break symlinks -->
<symlink action="delete" link="${basedir}/WEB-INF/lib" failonerror="no"/>
<symlink action="delete" link="${basedir}/WEB-INF/tld" failonerror="no"/>
<delete includeemptydirs="yes" failonerror="no">
<fileset dir="WEB-INF/work">
<include name="**"/>
</fileset>
<fileset dir="WEB-INF/lib">
<include name="**"/>
</fileset>
<fileset dir="WEB-INF/tld">
<include name="**"/>
</fileset>
</delete>
</target>
<target name="prepare" depends="clean">
<!-- create work directory -->
<mkdir dir="WEB-INF/work"/>
<chmod dir="WEB-INF/work" perm="0777" type="dir"/>
<!-- create lib directory and copy framework libraries -->
<mkdir dir="WEB-INF/lib"/>
<copy todir="WEB-INF/lib">
<fileset dir="../../src">
<include name="**"/>
</fileset>
</copy>
<!-- create tld directory and copy known tlds -->
<mkdir dir="WEB-INF/tld"/>
<copy todir="WEB-INF/tld">
<fileset dir="../../conf/tld">
<include name="*.tld"/>
</fileset>
</copy>
<!-- copy over the controller and server conf file -->
<copy todir=".">
<fileset dir="../../conf">
<include name="index.php"/>
<include name=".htaccess"/>
</fileset>
</copy>
</target>
</project>
5.logging.properties文件:
# == Setup log appenders ==
#logging.rootLogger=DEBUG, file
#logging.appender.file=horizon.util.logging.FileLogAppender
#logging.appender.file.file=/tmp/studs-basic.log
# == Specific logging per category ==
#logging.logger.[partial package or classname]=DEBUG
其他文件基本上都可以在框架源代码中找到。
页面文件如下:
1.index.php:
<?php
error_reporting(E_ALL);
ini_set(''include_path'', ''WEB-INF/lib'' . (DIRECTORY_SEPARATOR == ''/'' ? '':'' : '';'') . ''WEB-INF/classes'');
umask(0002);
require_once ''horizon/init.php'';
import(''stratus.connector.HttpProcessor'');
import(''stratus.config.ContextConfig'');
$config = & new ContextConfig(dirname(__FILE__));
$processor = & new HttpProcessor($config->getContext());
$processor->run();
?>
2.index.psp:
<%...@ page language="php" %>
<%...@ taglib uri="/WEB-INF/tld/phase-core.tld" prefix="c" %>
<%...@ taglib uri="/WEB-INF/tld/studs-html.tld" prefix="html" %>
<c:redirect context="/"><html:rewrite forward="welcome"/></c:redirect>
3.welcome.psp:
<%...@ page language="php" %>
<%...@ taglib uri="/WEB-INF/tld/phase-core.tld" prefix="c" %>
<%...@ taglib uri="/WEB-INF/tld/phase-fmt.tld" prefix="fmt" %>
<%...@ taglib uri="/WEB-INF/tld/studs-html.tld" prefix="html" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><fmt:message key="welcome.title" /></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<h3><fmt:message key="welcome.heading" /></h3>
<p><fmt:message key="welcome.message" /></p>
<p><html:link action="/example">Click here</html:link> for an example of the template tag library.</p>
<c:set var="welcomePageViewCount" value="${applicationScope.welcomePageViewCount + 1}" scope="application"/>
<p style="font-size: small;"><fmt:message key="pageviews.message" arg0="${applicationScope.welcomePageViewCount}"/></p>
</body>
</html>
4.example.psp:
<%...@ taglib uri="/WEB-INF/tld/studs-template.tld" prefix="template" %>
<%...@ taglib uri="/WEB-INF/tld/phase-string.tld" prefix="str" %>
<%...@ taglib uri="/WEB-INF/tld/phase-core.tld" prefix="c" %>
<template:insert template="/pages/tmpl/template.psp">
<template:put name="title" content="Studs :: Template Taglib Example" direct="true"/>
<template:put name="heading" direct="true">Template Taglib Example</template:put>
<template:put name="intro" direct="true">
This page demonstrates the use of the studs template taglib. Content is inserted by the parent page either directly or via an include file. Below are two examples of content insertion.
</template:put>
<template:put name="content" direct="true">
<str:replace replace="LF" with="<br />">This text was specified inline using the template:put tag.
It also uses the str:replace taglib to convert endlines to BR tags.
I am also testing the conditional EL syntax. <strong>${2 % 2 ? ''odd'' : ''even''}</strong></str:replace>
</template:put>
<template:put name="content2" content="/pages/tmpl/content.psp" />
</template:insert>
5.template.psp:
<%...@ taglib uri="/WEB-INF/tld/studs-html.tld" prefix="html" %>
<%...@ taglib uri="/WEB-INF/tld/studs-template.tld" prefix="template" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<title><template:get name="title" /></title>
</head>
<body>
<h3><template:get name="heading" /></h3>
<p><template:get name="intro" /></p>
<p style="border: 1px dashed #999999; background-color: #F0F0F0;">
<template:get name="content" />
</p>
<p style="border: 1px dashed #999999; background-color: #F0F0F0;">
<template:get name="content2" />
</p>
<p>« <html:link forward="welcome">Back</html:link></p>
</body>
</html>
6.content.psp:
This text comes from an include file using the template:put tag.
这样,一个基于PHP Studs框架的示例程序就完成了。(注:上诉代码取自studs自带的例子)
文件下载网址 Apache 2.2.4 -- www.apache.com PHP 5.2.0 -- www.php.net MySQL 5.0.27 -- www.mysql.com Zend Optimizer 3.2.0 -- www.zend.com phpMyAdmin 2.9.2 -- www.phpmyadmin.net Apache 2.2.4 的安装 1.站点下载 apache_2.2.4-win32-x86-no_ssl.msi 并执行。 2..按3 次Next按钮,安装程序要求输入你的Network Domain(网络域名)、Server Domain(服务器域名)和网站管理员的E-mail。 3..进入Next后,默认的安装路径是"C:Program FilesApache Software FoundationApache2.2",修改路径,改为前面所述的"D:Program FilesApache2"。 然后一路下去,直到安装结束;此时,打开D盘下的Program Files文件夹,可以看到有一个名为Apache2的文件夹。 打开IE,然后在地址栏输入:"http://localhost" 或者 "http://127.0.0.1" 可以看到Apache安装完成的成功页面;以后网页的存在位置就在 "D:Program FilesApache2htdocs" 目录。 PHP 5.2.0 的安装 1.到其官方站点下载 php-5.2.0-Win32.zip 并解压(在此不要下载及使用它的Installer,这种方式虽然很自动化、很智能,但也存在很多方面的限制,因为不推荐。) |
相关文章
PHP session_start()很慢问题分析与解决办法
本文章来给各位同学介绍一下关于PHP session_start()很慢问题分析与解决办法,希望碰到此问题的同学可进入参考。 最近在做东西的时候发现一个问题 有一个接口挂...2016-11-25php 中file_get_contents超时问题的解决方法
file_get_contents超时我知道最多的原因就是你机器访问远程机器过慢,导致php脚本超时了,但也有其它很多原因,下面我来总结file_get_contents超时问题的解决方法总结。...2016-11-25- 相信很多站长都遇到过这样一个问题,访问页面时出现408错误,下面一聚教程网将为大家介绍408错误出现的原因以及408错误的解决办法。 HTTP 408错误出现原因: HTT...2017-01-22
- php如何实现抓取网页图片,相较于手动的粘贴复制,使用小程序要方便快捷多了,喜欢编程的人总会喜欢制作一些简单有用的小软件,最近就参考了网上一个php抓取图片代码,封装了一个php远程抓取图片的类,测试了一下,效果还不错分享...2015-10-30
- 下面我们来看一篇关于Android子控件超出父控件的范围显示出来方法,希望这篇文章能够帮助到各位朋友,有碰到此问题的朋友可以进来看看哦。 <RelativeLayout xmlns:an...2016-10-02
- ps软件是现在非常受大家喜欢的一款软件,有着非常不错的使用功能。这次文章就给大家介绍下ps把文字背景变透明的操作方法,喜欢的一起来看看。 1、使用Photoshop软件...2017-07-06
intellij idea快速查看当前类中的所有方法(推荐)
这篇文章主要介绍了intellij idea快速查看当前类中的所有方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2020-09-02- 1.在没有设置默认值的情况下: 复制代码 代码如下:SELECT userinfo.id, user_name, role, adm_regionid, region_name , create_timeFROM userinfoLEFT JOIN region ON userinfo.adm_regionid = region.id 结果:...2014-05-31
- 本文为那些对学习 Windows PowerShell 命令行和脚本编写环境感兴趣的系统管理员提供了资源。也请告诉我们本网站如何才能对您更有用处。...2020-06-30
js导出table数据到excel即导出为EXCEL文档的方法
复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta ht...2013-10-13- 批量更新mysql更新语句很简单,更新一条数据的某个字段,一般这样写:复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';如果更新同一字段为同一个值,mysql也很简单,修改下where即...2013-10-04
- ps软件是一款非常不错的图片处理软件,有着非常不错的使用效果。这次文章要给大家介绍的是ps怎么制作倒影,一起来看看设计倒影的方法。 用ps怎么做倒影最终效果̳...2017-07-06
- 本文涉及的主题虽然很基础,在许多人看来属于小伎俩,但在JavaScript基础知识中属于一个综合性的话题。这里会涉及到对象属性的封装、原型、构造函数、闭包以及立即执行表达式等知识。公有方法 公有方法就是能被外部访问...2015-11-08
安卓手机wifi打不开修复教程,安卓手机wifi打不开解决方法
手机wifi打不开?让小编来告诉你如何解决。还不知道的朋友快来看看。 手机wifi是现在生活中最常用的手机功能,但是遇到手机wifi打不开的情况该怎么办呢?如果手机wifi...2016-12-21- 最近想自学PHP ,做了个验证码,但不知道怎么搞的,总出现一个如下图的小红叉,但验证码就是显示不出来,原因如下 未修改之前,出现如下错误; (1)修改步骤如下,原因如下,原因是apache权限没开, (2)点击打开php.int., 搜索extension=ph...2013-10-04
- 单个字符分割 string s="abcdeabcdeabcde"; string[] sArray=s.Split('c'); foreach(string i in sArray) Console.WriteLine(i.ToString()); 输出下面的结果: ab de...2020-06-25
- javascript控制页面控件隐藏显示的两种方法,方法的不同之处在于控件隐藏后是否还在页面上占位 方法一: 复制代码 代码如下: document.all["panelsms"].style.visibility="hidden"; document.all["panelsms"].style.visi...2013-10-13
连接MySql速度慢的解决方法(skip-name-resolve)
最近在Linux服务器上安装MySql5后,本地使用客户端连MySql速度超慢,本地程序连接也超慢。 解决方法:在配置文件my.cnf的[mysqld]下加入skip-name-resolve。原因是默认安装的MySql开启了DNS的反向解析。如果禁用的话就不能...2015-10-21- 本篇文章是对C#方法进行了详细的总结与介绍,需要的朋友参考下...2020-06-25
- 步骤:Window -> PHP -> Editor -> Templates,这里可以设置(增、删、改、导入等)管理你的模板。新建文件注释、函数注释、代码块等模板的实例新建模板,分别输入Name、Description、Patterna)文件注释Name: 3cfileDescriptio...2013-10-04