精华内容
下载资源
问答
  • session 常量
    千次阅读
    2021-04-28 10:24:40

    Session是什么?

    首先,我们大概知道session是浏览器与服务器之间的一次交互会话。

    那么会话又是什么呢?顾名思义就是浏览器与服务器之间的对话,浏览器一关闭,会话就结束了。

    说session不得不说的就是HTTP协议和cookie了

    我们都知道http协议是一个无状态的协议,就是说本次请求和上次请求没有任何关系。这就会带了一个问题,如果请求的页面有关联,比如登录后访问首页,那么在首页怎么判断是登录状态呢?

    所以此时cookie就出现了,cookie是把少量的信息存储在用户自己的浏览器上,当用户用浏览器访问服务器时,PHP就可以读取cookie中的信息,在任何页面中都可以使用。

    但是cookie存在缺陷,cookie存储在客户端,存储大小有限制,一个域名下存储个数也有限制,最关键的是用户是可见的,不安全,用户可以修改甚至禁用cookie

    这个时候session就出现了,session存储在服务器端,不用每次请求客户端都随身携带cookie

    所以:session的作用就是:解决HTTP协议请求的无状态问题,让多次的HTTP请求产生联系

    Session的运行机制

    我们要使用session,第一步就是开启session,这也是session的第一阶段:

    session_start() 阶段

    这个函数的作用就是开启session,开启之后读取cookie信息判断是否存在session_id,如果存在就是用这个session_id,如果没有就会随机生成一个唯一的32位的session_id。通过这个session_id就可以绑定一个唯一的用户。

    这个过程还会初始化$SESSION这个变量,读取session文件中的内容,把内容反序列化之后赋值到$SESSION这个变量中,这个阶段还有一个特别关键的作用,还会判断那些session文件已经过期,调用gc进程,删除掉过期的session文件。gc如何判断文件是否过期,如何操作后面再说

    session_start(); echo "SID: ".SID.""; echo "session_id(): ".session_id().""; echo "COOKIE: ".$_COOKIE["PHPSESSID"];

    输出:

    SID:PHPSESSID=bjjwfoo45hajsjv89trsgtiertbuiwom

    session_id():bjjwfoo45hajsjv89trsgtiertbuiwom

    cookie:提示Notice:undefined index:PHPSESSID

    这个因为浏览器第一次请求还没有在cookie中存储session_id,这个cookie的一个特性,只有当第一次请求之后,服务器接收到请求才在服务器端设置cookie,存储session_id。

    注意:cookie中存储的session_id默认是会话时间

    SID:是系统常量,SID包含着会话名以及会话ID的常量,格式为“name=ID”,如果cookie中已经存在session_id,SID就为一个空字符串,不然就是"name=ID"

    第二阶段就是脚本运行期间:

    php只是对$_SESSION这个变量进行增删改查的操作,需要注意:这个阶段并没有影响到session文件里面的内容,除非你在这个阶段session_destroy()了,除此之外,该阶段不会对session文件有任何影响

    第三阶段:脚本执行结束

    在这个阶段才会对session文件进行操作,也就是这个阶段才会把$_SESSION数组中的数据序列化然后存储到session文件

    session的存储方式

    默认会存储在服务器的临时目录,以文件的形式存储,文件名为(sess_+session_id),这些都可以在php.ini文件中配置,文件内容为序列化的数据,如下:

    $_SESSION['name'] = ‘张三'

    $_SESSION['age'] = 18

    session文件为:

    name|i:张三;age|i:18

    下面是常用的php.ini文件中sessionde相关配置:

    session.save_handler = files #规定session的存储方式,默认是文件,还可以是redis或者是memcache,提升效率

    session.save_path = "d:/wamp/tmp" #规定session文件的存储目录

    session.use_cookies = 1 #是否使用cookie存储session_id

    session.name = PHPSESSID #客户端存储session_id的会话名

    session.auto_start = 0 #是否自动开启session

    session.cookie_lifetime = 0 #设置客户端中存储的session_id的过期时间,注意session的过期时间是间隔的,比如20分钟过期,重新访问了,session的过期时间会重新计算,cookie的过期时间是累记的

    session.serialize_handler = php

    session.gc_divisor = 1000

    session.gc_probability = 1

    session.gc_maxlifetime = 1440 #设置session文件的过期时间

    session的垃圾回收机制

    一个用户访问服务器会产生一个session文件,关闭浏览器,然后在访问服务器又会产生一个新的session文件,这样session的垃圾文件就会很多,长时间不清理就会占用大量的磁盘空间,访问session文件的速度也会降低,gc进程垃圾回收就很有必要了

    先提一下PHP的一些清理session的函数

    unset($_SESSION['name']) 清理某个变量

    session_unset() 不传参数,清除所有的session变量,但是session文件还在

    session_destroy() 清除session文件

    setcookie(session_name(), '', time()-1000, '/') 设置cookie文件过期

    注意:一般做了session_destroy()操作之后,setcookie(session_name(), '', time()-1000, '/')也是必须的,不然用户重新刷新页面,又会设置一样的session_id,产生session文件

    然后就是gc自动删除垃圾文件:

    session.gc_divisor = 1000

    session.gc_probability = 1

    session.gc_maxlifetime = 1440 #设置session文件的过期时间

    删除session垃圾文件的概率是,session.gc_probability/session.gc_divisor=1/1000,也就是说每次session_start()都会有1/1000的概率触发gc进程,但是1000次中必会有一次,如果session.gc_probalility = 1000,就是100%的概率,也就说每次session_start()都会触发gc进程

    原文:https://www.cnblogs.com/daijiandong/p/12070947.html

    更多相关内容
  • 原来是将一个变量数组通过一个常量来存储到session中,而这样做的好处是,为了避免不应有的输入错误,导致接收session时出错。因为我们输入session(self::)之后,phpstrom会自动的提示,方便我们输入,以避免

      在这几天的学习当中,看到总工写出了这个,自己看的不是特别明白





    后来查了一下thinkphp框架中session的用法


    原来是将一个变量数组通过一个常量来存储到session中,而这样做的好处是,为了避免不应有的输入错误,导致接收session时出错。因为我们输入session(self::)之后,phpstrom会自动的提示,方便我们输入,以避免输入错误。

    展开全文
  • Tensorflow入门----占位符、常量Session.pdf
  • php中session_id()函数原型及说明session_id()函数说明:stringsession_id([string$id])session_id() 可以用来获取/设置 当前会话 ID。为了能够将会话 ID 很方便的附加到 URL 之后, 你可以使用常量 SID 获取以字符串...
  • 主要介绍了thinkphp中常用的系统常量和变量,需要的朋友可以参考下
  • php session 预定义数组

    2020-12-18 08:02:39
    您可能感兴趣的文章:PHP实现的自定义数组排序函数与排序类示例PHP中定义数组常量(array常量)的方法php定义数组和使用示例(php数组的定义方法)php学习笔记 [预定义数组(超全局数组)]PHP 数组教程 定义数组用php...
  • 复制代码 代码如下:if (defined(‘CONST_NAME’)) { //do something } 变量检测则是使用isset,注意变量未声明或声明时赋值为NULL,isset均返回FALSE,如: 复制代码 代码如下: if (isset($var_...php /* 判断常量
  • 一、session预定义常量 个人感觉PHP 最大的特点就是功能的实现都靠提供的函数扩展,函数扩展都是根据功能分大类的,session只是其中的一个扩展。 该扩展中定义了一些常量,可在PHP 编译或运行时动态载入时可用: 1、...

    一、session预定义常量

    个人感觉PHP 最大的特点就是功能的实现都靠提供的函数扩展,函数扩展都是根据功能分大类的,session只是其中的一个扩展。

    该扩展中定义了一些常量,可在PHP 编译或运行时动态载入时可用:

    1、SID(string)

    包含着会话名及会话ID 的常量,格式为"name=ID",如果会话ID 已经在恰当的会话cookie 中设定时则为空字符串。和session_id() 返回的是同一个ID。


    2、PHP_SESSION_DISABLED(int)

    自PHP 5.4.0起可用。如果会话已禁用,则返回session_status()的值。


    3、PHP_SESSION_NONE(int)

    自PHP 5.4.0起可用。在会话已启用,但还没有会话时返回session_status()的值。


    4、PHP_SESSION_ACTIVE(int)

    自PHP 5.4.0起可用。在会话已启用,并存在会话时返回session_status()的值。

    注:会话在PHP中默认为激活(启用)。


    session常量动态定义的,网友:

    var_dump(defined('SID'));  // bool(false) - Not defined...
    session_start();
    var_dump(defined('SID'));  // bool(true) - Defined now!

    自己测试了下,结果两个都是bool(true),应该是自己的问题。之后随后重新建一个php文档,执行:

    <?php
    echo SID;          //提示使用了未定义常量
    session_start();
    echo SID;          //显示"name=UID"样式字符串。说明确实是动态定义,因为没有会话就没有会话的UID.
    ?>


    二、基本用法

    通过为每个独立用户分配唯一的会话 ID,可以实现针对不同用户分别存储数据的功能。 会话通常被用来在多个页面请求之间保存及共享信息。 一般来说,会话 ID 通过 cookie 的方式发送到浏览器,并且在服务器端也是通过会话 ID 来取回会话中的数据。 如果请求中不包含会话 ID 信息,那么 PHP 就会创建一个新的会话,并为新创建的会话分配新的 ID。

    会话的工作流程很简单。当开始一个会话时,PHP 会尝试从请求中查找会话 ID (通常通过会话 cookie), 如果请求中不包含会话 ID 信息,PHP 就会创建一个新的会话。 会话开始之后,PHP 就会将会话中的数据设置到 $_SESSION 变量中。 当 PHP 停止的时候,它会自动读取 $_SESSION 中的内容,并将其进行序列化, 然后发送给会话保存管理器器来进行保存。

    默认情况下,PHP 使用内置的文件会话保存管理器(files)来完成会话的保存。 也可以通过配置项session.save_handler 来修改所要采用的会话保存管理器。 对于文件会话保存管理器,会将会话数据保存到配置项session.save_path 所指定的位置。

    可以通过调用函数 session_start() 来手动开始一个会话。 如果配置项 session.auto_start 设置为1, 那么请求开始的时候,会话会自动开始。

    PHP 脚本执行完毕之后,会话会自动关闭。 同时,也可以通过调用函数 session_write_close() 来手动关闭会话。

    Example #1 在 $_SESSION 中注册变量。

    <?php
    session_start
    ();
    if (!isset(
    $_SESSION['count'])) {
      
    $_SESSION['count'] = 0;
    } else {
      
    $_SESSION['count']++;
    }
    ?>

    Example #2 从 $_SESSION 中反注册变量。

    <?php
    session_start
    ();
    unset(
    $_SESSION['count']);
    ?>

    Caution

    千万不要使用 unset($_SESSION) 来复位超级变量 $_SESSION, 因为这样会导致无法继续在 $_SESSION中注册会话变量。

    Warning

    由于无法将一个引用恢复到另外一个变量, 所以不可以将引用保存到会话变量中。

    Warning

    如果会话中存在和全局变量同名的变量,那么 register_globals 会导致全局变量被会话变量覆盖。 更多信息请参考 注册全局变量

    Note:

    无论是通过调用函数 session_start() 手动开启会话, 还是使用配置项 session.auto_start 自动开启会话, 对于基于文件的会话数据保存(PHP 的默认行为)而言, 在会话开始的时候都会给会话数据文件加锁, 直到 PHP 脚本执行完毕或者显式调用 session_write_close() 来保存会话数据。 在此期间,其他脚本不可以访问同一个会话数据文件。

    对于大量使用 Ajax 或者并发请求的网站而言,这可能是一个严重的问题。 解决这个问题最简单的做法是如果修改了会话中的变量, 那么应该尽快调用 session_write_close() 来保存会话数据并释放文件锁。 还有一种选择就是使用支持并发操作的会话保存管理器来替代文件会话保存管理器。

    理解:由于HTTP 的不可维持性(执行一段php脚本,实际上进行了一次http 通信),每段php脚本执行完时,会话会自动自动关闭。即同一时刻,只有一个php脚本访问到该session及其数据文件。为了保证每个php脚本访问到的session及其数据文件都是最新的,每次对该session的数据修改都应该及时保存进数据文件中,这在大量Ajax  应用中非常重要。


    终结session:

    1、session_destroy():常用方法。

    2、unset($_SESSION):终结必杀,使用后无法继续使用$_SESSION 注册会话变量,所以一般不能用,算不上真正的方法。

    网上的另一种方法,思路和删除cookie一样,没有具体实践,不知可行否:

     3、setcookie(session_name(),session_id(),time() -8000000,..);



    原网页:http://php.net/manual/zh/session.examples.basic.php









    展开全文
  • 变量:变量用于存储值,比如数字、文本字符串或数组。一旦设置了某个变量,我们就可以在脚本中重复地使用它。...如果那样做的话,变量将是无效的。让我们试着创建一个存有字符串的变量,和一个存有数值的变量:1....
  • 它是通过 Session ID 来判断的,什么是 Session ID,就是那个 Session 文件的文件名,Session ID 是随机生成的,因此能保证唯一性和随机性,确保Session 的安全。一般如果没有设置 Session 的生存周期,则 Session ...
  • 主要介绍了Tensorflow中的图(tf.Graph)和会话(tf.Session)的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 今天小编就为大家分享一篇TensorFlow基本的常量、变量和运算操作详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 2.常量一旦被声明将可以在全局可见,也就是说,它们可以函数内外使用,但是这仅仅限于一个页面之中(包含我们通过include和include_once)包含进来的PHP脚本,但是在其他的页面之中就不能使用了。 3.在一个脚本中...
  • 常量 DBMS_LOGMNR包包含多种枚举常量。这些常量使用时必须以DBMS_LOGMNR为前缀。 NEW 隐式调用DBMS_LOGMNR.END_LOGMNR存储过程结束当前的logminer session然后创建一个新的session。新session从指定的redo日志...
  • 有两种方法可以得到用户的session id,第一是使用session_id()函数,另外一种是使用内置的常量SID获得,SID包含了session id和session值 <?php session_start(); print("<html><b>"); $sid = session_...
  • 由于刚刚学习Tensorflow,所以对常量、占位符、Session进行讲解 #先导入TensorFlow import tensorflow as tf hello_constant = tf.constant('Hello World!') with tf.Session() as sess: output = sess.run...

    由于刚刚学习Tensorflow,所以对常量、占位符、Session进行讲解

    #先导入TensorFlow 
    import tensorflow as tf 
    
    hello_constant = tf.constant('Hello World!') 
    with tf.Session() as sess:
        output = sess.run(hello_constant) print(output)
    

    1.Tensor
               在 TensorFlow 中,数据不是以整数,浮点数或者字符串形式存在的,而是被封装在一个叫做 tensor 的对象中。Tensor是张量的意思,张量包含了0到任意维度的量,其中,0维的叫做常数,1维的叫做向量,二维叫做矩阵,多维度的就直接叫张量量。在 hello_constant = tf.constant(‘Hello World!’) 代码中,hello_constant是一个 0 维度的字符串 tensor,tensors 还有很多不同大小:

    # tensor1 是一个0维的 int32 tensor 
      tensor1 = tf.constant(1234) 
    # tensor2 是一个1维的 int32 tensor 
      tensor2 = tf.constant([123,456,789]) 
    # tensor3 是一个二维的 int32 tensor 
      tensor3 = tf.constant([ [123,456,789], [222,333,444] ])
    
    

    2.Session

    Tensorflow中的所有计算都构建在一张计算图中,这是一种对数学运算过程的可视化方法。就像刚才的代码:

    with tf.Session() as sess:
        output = sess.run(hello_constant)

    这个session就是负责让这个图运算起来,session的主要任务就是负责分配GPU或者CPU的。

    3.tf.placeholder()
    前面代码中出现了tf.constant(‘Hello World!’),这个tf.constant是用来定义常量的,其值是不变的,但是如果你需要用到一个变量怎么办呢?

    这个时候就需要用到tf.placeholder() 和 feed_dict了。
    先给代码

    x = tf.placeholder(tf.string)
    
    with tf.Session() as sess:
        output = sess.run(x, feed_dict={x: 'Hello World'})

     tf.placeholder表示一个占位符,至于是什么类型,看自己定义了,这里定义的是tf.string类型,然后呢,在session开始run以前,也就死这个图开始计算以前,就使用feed_dict将对应的值传入x,也就是这个占位符。
    同样的feed_dict可以设置多个tensor

    x = tf.placeholder(tf.string) 
    y = tf.placeholder(tf.int32) 
    z = tf.placeholder(tf.float32) 
    with tf.Session() as sess: 
        output = sess.run(x, feed_dict={x: 'Test String', y: 123, z: 45.67})
    

    但是需要注意的是,使用feed_dict设置tensor的时候,需要你给出的值类型与占位符定义的类型相同

    展开全文
  • session的使用

    2018-12-07 09:10:17
    objiect--传递的对象,可以是常量,也可以是某个对象或对象集合,如果objiect没有值,在客户端输出的时候,会出现空白 Jsp中取值: ----如果是对象集合:则使用&lt;c:foreach item="String" var...
  • 本文总结了PHP 预定义变量、魔术常量和魔术方法。分享给大家供大家参考,具体如下: PHP 预定义了一些变量、常量、方法,使用起来很方便,例如直接使用 __DIR__ 获取当前文件所在的目录。 下面分别详细介绍一下 ...
  • 在cookie关闭的情况下,如何让我们的用户体验做的更好,session的传递方式学习是很重要的,让一个数据能在多个页面中传递,感兴趣的小伙伴们可以参考一下
  • 在一个页面设置一个cookie时,必须刷新或到下一个页面才可以用 $_COOKIE 得到变量的值.原因是因为当页面第一次被浏览器访问载入时,页面中的 cookie 会被设置,将其发送存储到客户端指定的存储位置,所以$_COOKIE没有...
  • class Session { //mysql的主机地址 const db_host = "localhost"; //需要第三方指定ip地址 //数据库用户名 const db_user = "root"; //需要第三方指定自己的用户名 //数据库密码 const db_pwd = ""; /...
  • php 中的常量

    2021-05-08 12:01:26
    1.__FINE__返回当前常量所在的行号。2.__FILE__返回文件的完整路径和文件名。3.__FUNCTION__返回函数名称。4.__CLASS__返回类名称。5.__METHOD__返回类的方法名6.PHP_VERSION返回PHP 程序的版本,如 '3.0.8-dev'。7...
  • 这些特殊的常量不区分大小写。__LINE__:返回文件中的当前行号。也可写成__line__。__FILE__:返回当前文件的绝对路径(包含文件名)。__DIR__:返回当前文件的绝对路径(不包含文件名),等价于dirname(__FILE__)。__...
  • 主要介绍了smarty模板中使用get、post、request、cookies、session变量的方法,需要的朋友可以参考下
  • SET SESSION "myapp.old" = ''; SET SESSION "myapp.new" = ''; UPDATE contract_work_calendar_use SET operation_user_name = current_setting ( 'myapp.new' ) WHERE operation_user_name = current_setting...
  • php5的session详解.doc

    2022-06-22 10:02:48
    php5的session详解.doc
  • MNN Interpreter and Session

    千次阅读 2020-09-12 17:56:16
    MNN 中 Interpreter 和 Session 之间的关系如下图所示: Interpreter 为模型解释器,亦为会话管理器,负责从文件加载模型,创建并执行会话; 一个 Interpreter 对应到一个 Net,管理基于该网络的多个任务; Session ...
  • 对登录机制详细讲解,cookie和session区别和联系,由浅到深,由表到里,最终你会融会贯通

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 72,780
精华内容 29,112
关键字:

session 常量