在Yii2中,可以通过在程序中调用set()方法来设置会话数据,并通过setTimeout()方法来设置会话的过期时间。例如:
$session = Yii::$app->session;
$session->set('key', 'value');
$session->setTimeout(3600); // 1小时
上述代码将key和value存储到会话数据中,并将会话的过期时间设置为1小时。
底层原理:在Yii2中,会话数据和会话过期时间都是存储在会话数据中的。当我们调用set()方法设置会话数据时,Yii2会将数据存储到会话数据中,并自动生成一个时间戳作为会话数据的有效期限。当我们调用setTimeout()方法设置会话过期时间时,Yii2会将该过期时间设置到会话数据中,覆盖自动生成的时间戳。在每次读取会话数据时,Yii2会检查会话数据中的时间戳和过期时间,并比较它们与当前时间之间的差值,以确定会话是否已过期。如果会话已过期,则Yii2会自动删除会话数据。这种设计模式使得Yii2的会话管理系统具有很好的灵活性和可扩展性,开发者可以在程序中自由地设置会话数据和会话过期时间,而无需改变应用程序的会话代码。