{"id":1065,"date":"2025-06-12T11:48:58","date_gmt":"2025-06-12T03:48:58","guid":{"rendered":"https:\/\/www.zhaozhao123.cn\/php\/php-application-manual\/symfony\/1065.html"},"modified":"2025-06-12T11:48:58","modified_gmt":"2025-06-12T03:48:58","slug":"symfony%e4%bc%9a%e8%af%9d%e7%ae%a1%e7%90%86%ef%bc%9a%e5%ae%9e%e8%b7%b5%e6%8c%87%e5%8d%97","status":"publish","type":"my1js","link":"https:\/\/www.zhaozhao123.cn\/php\/my1js\/1065.html","title":{"rendered":"Symfony\u4f1a\u8bdd\u7ba1\u7406\uff1a\u5b9e\u8df5\u6307\u5357"},"content":{"rendered":"<div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--1\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/dyA-1-400x300.jpg\" alt=\"Bug&#32534;&#35793;&#29422;\" class=\"wp-image-1842\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">Bug&#32534;&#35793;&#29422;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>&#12298;Symfony&#20250;&#35805;&#31649;&#29702;&#65306;&#23454;&#36341;&#25351;&#21335;&#12299;<\/p>\n<p>&#22312;&#29616;&#20195;&#30340;Web&#24320;&#21457;&#20013;&#65292;&#20250;&#35805;&#31649;&#29702;&#26159;&#30830;&#20445;&#29992;&#25143;&#25968;&#25454;&#25345;&#20037;&#21270;&#30340;&#19968;&#31181;&#37325;&#35201;&#25216;&#26415;&#12290; Symfony&#65292;&#20316;&#20026;PHP&#26694;&#26550;&#20043;&#19968;&#65292;&#25552;&#20379;&#20102;&#24378;&#22823;&#30340;&#20250;&#35805;&#31649;&#29702;&#21151;&#33021;&#12290;&#26412;&#25991;&#23558;&#20171;&#32461;&#22914;&#20309;&#20351;&#29992;Symfony&#36827;&#34892;&#20250;&#35805;&#31649;&#29702;&#65292;&#24182;&#25552;&#20379;&#19968;&#20123;&#23454;&#29992;&#30340;&#31034;&#20363;&#21644;&#26368;&#20339;&#23454;&#36341;&#12290;<\/p>\n<h3>1. &#23433;&#35013;Symfony<\/h3>\n<p>&#39318;&#20808;&#65292;&#20320;&#38656;&#35201;&#23433;&#35013;&#19968;&#20010;PHP&#24320;&#21457;&#29615;&#22659;&#12290;&#28982;&#21518;&#65292;&#20351;&#29992;Composer&#26469;&#21019;&#24314;&#19968;&#20010;&#26032;&#30340;Symfony&#39033;&#30446;&#65306;<\/p>\n<pre><code class=\"language-bash\">composer create-project symfony\/skeleton my_project\ncd my_project<\/code><\/pre>\n<h3>2. &#37197;&#32622;&#20250;&#35805;&#31649;&#29702;<\/h3>\n<p>&#22312;<code>config\/packages\/session.yaml<\/code>&#25991;&#20214;&#20013;&#37197;&#32622;&#20250;&#35805;&#31649;&#29702;&#65306;<\/p>\n<pre><code class=\"language-yaml\">session:\n    handler_id: session.handler.native\n    cookie_lifetime: 3600\n    gc_maxlifetime: 7200\n    save_path: '%kernel.project_dir%\/var\/sessions'<\/code><\/pre>\n<h3>3. &#20351;&#29992;&#20250;&#35805;&#23384;&#20648;<\/h3>\n<p>&#22312;&#25511;&#21046;&#22120;&#20013;&#65292;&#20320;&#21487;&#20197;&#30452;&#25509;&#20351;&#29992;&#20250;&#35805;&#23384;&#20648;&#65306;<\/p>\n<pre><code class=\"language-php\">use SymfonyComponentHttpFoundationSessionSession;\n\nclass UserController extends AbstractController\n{\n    public function loginAction(Request $request)\n    {\n        $session = $this-&gt;get('session');\n        $session-&gt;set('username', 'john_doe');\n\n        return $this-&gt;render('login.html.twig');\n    }\n\n    public function logoutAction()\n    {\n        $session = $this-&gt;get('session');\n        $session-&gt;clear();\n\n        return $this-&gt;redirectToRoute('homepage');\n    }\n}<\/code><\/pre>\n<h3>4. &#31034;&#20363;&#20195;&#30721;&#65306;&#35774;&#32622;&#21644;&#33719;&#21462;&#20250;&#35805;&#21464;&#37327;<\/h3>\n<p>&#20197;&#19979;&#26159;&#19968;&#20010;&#23436;&#25972;&#30340;&#31034;&#20363;&#65292;&#23637;&#31034;&#20102;&#22914;&#20309;&#35774;&#32622;&#21644;&#33719;&#21462;&#20250;&#35805;&#21464;&#37327;&#65306;<\/p>\n<pre><code class=\"language-php\">\/\/ src\/Controller\/UserController.php\nnamespace AppController;\n\nuse SymfonyComponentHttpFoundationRequest;\nuse SymfonyBundleFrameworkBundleControllerAbstractController;\n\nclass UserController extends AbstractController\n{\n    public function loginAction(Request $request)\n    {\n        $session = $this-&gt;get('session');\n        $session-&gt;set('username', 'john_doe');\n\n        return $this-&gt;render('login.html.twig');\n    }\n\n    public function logoutAction()\n    {\n        $session = $this-&gt;get('session');\n        $session-&gt;clear();\n\n        return $this-&gt;redirectToRoute('homepage');\n    }\n\n    public function profileAction()\n    {\n        $session = $this-&gt;get('session');\n        $username = $session-&gt;get('username');\n\n        if ($username) {\n            return $this-&gt;render('profile.html.twig', ['username' =&gt; $username]);\n        } else {\n            return $this-&gt;redirectToRoute('login');\n        }\n    }\n}<\/code><\/pre>\n<h3>5. &#24635;&#32467;<\/h3>\n<p>&#36890;&#36807;&#20197;&#19978;&#27493;&#39588;&#65292;&#20320;&#24050;&#32463;&#25104;&#21151;&#22320;&#22312;Symfony&#39033;&#30446;&#20013;&#23454;&#29616;&#20102;&#20250;&#35805;&#31649;&#29702;&#12290;&#20250;&#35805;&#31649;&#29702;&#23545;&#20110;&#30830;&#20445;&#29992;&#25143;&#30340;&#30331;&#24405;&#29366;&#24577;&#12289;&#36141;&#29289;&#36710;&#35760;&#24405;&#31561;&#38750;&#24120;&#26377;&#29992;&#12290;&#35760;&#20303;&#65292;&#26681;&#25454;&#20320;&#30340;&#24212;&#29992;&#38656;&#27714;&#35843;&#25972;&#20250;&#35805;&#37197;&#32622;&#65292;&#20197;&#23454;&#29616;&#26356;&#22909;&#30340;&#29992;&#25143;&#20307;&#39564;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--2\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/zp-400x300.jpg\" alt=\"&#40657;&#26495;Bug&#35762;&#24072;\" class=\"wp-image-1849\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">&#40657;&#26495;Bug&#35762;&#24072;<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<body><h2>&#20171;&#32461;<\/h2><p>&#22312;&#24320;&#21457;Web&#24212;&#29992;&#31243;&#24207;&#26102;&#65292;&#31649;&#29702;&#29992;&#25143;&#20250;&#35805;&#26159;&#26377;&#25928;&#22788;&#29702;&#29992;&#25143;&#29366;&#24577;&#21644;&#20132;&#20114;&#30340;&#20851;&#38190;&#26041;&#38754;&#12290;Symfony&#20316;&#20026;&#19968;&#27454;&#24378;&#22823;&#30340;PHP&#26694;&#26550;&#65292;&#25552;&#20379;&#20102;&#20016;&#23500;&#30340;&#24037;&#20855;&#26469;&#31649;&#29702;&#21644;&#37197;&#32622;&#20250;&#35805;&#65292;&#36825;&#20123;&#24037;&#20855;&#21487;&#20197;&#26681;&#25454;&#19981;&#21516;&#30340;&#38656;&#27714;&#36827;&#34892;&#35843;&#25972;&#12290;&#22312;&#36825;&#31687;&#23454;&#29992;&#25351;&#21335;&#20013;&#65292;&#25105;&#20204;&#23558;&#25506;&#35752;&#22914;&#20309;&#22312;Symfony&#20013;&#31649;&#29702;&#20250;&#35805;&#65292;&#21253;&#25324;&#20250;&#35805;&#30340;&#37197;&#32622;&#12289;&#20351;&#29992;&#20197;&#21450;&#26368;&#20339;&#23454;&#36341;&#12290;<\/p><h2>&#29702;&#35299;Symfony&#20250;&#35805;<\/h2><p>Symfony&#30340;&#20250;&#35805;&#31649;&#29702;&#36890;&#36807;HTTP&#22522;&#30784;&#32452;&#20214;&#23454;&#29616;&#65292;&#25552;&#20379;&#20102;&#19968;&#20010;&#38754;&#21521;&#23545;&#35937;&#30340;&#25968;&#25454;&#22788;&#29702;&#23618;&#12290;&#22312;&#28145;&#20837;&#25506;&#35752;&#22914;&#20309;&#31649;&#29702;&#21644;&#20351;&#29992;&#20250;&#35805;&#20043;&#21069;&#65292;&#20102;&#35299;&#20160;&#20040;&#26159;&#20250;&#35805;&#26159;&#38750;&#24120;&#37325;&#35201;&#30340;&#12290;&#19968;&#20010;&#20250;&#35805;&#26159;&#19968;&#31181;&#23384;&#20648;&#20449;&#24687;&#30340;&#26041;&#27861;&#65292;&#22312;&#22810;&#20010;&#39029;&#38754;&#20043;&#38388;&#20849;&#20139;&#36825;&#20123;&#20449;&#24687;&#12290;&#19982;Cookie&#19981;&#21516;&#65292;&#36825;&#20123;&#20449;&#24687;&#19981;&#23384;&#20648;&#22312;&#29992;&#25143;&#30340;&#35745;&#31639;&#26426;&#19978;&#12290;&#40664;&#35748;&#24773;&#20917;&#19979;&#65292;Symfony&#20250;&#35805;&#20445;&#23384;&#22312;&#26381;&#21153;&#22120;&#31471;&#12290;<\/p><h2>&#24320;&#22987;&#20351;&#29992;Symfony&#20013;&#30340;&#20250;&#35805;&#12290;<\/h2><p>&#35201;&#22312;Symfony&#20013;&#24320;&#22987;&#20250;&#35805;&#65292;&#24744;&#39318;&#20808;&#38656;&#35201;&#30830;&#20445;&#22312;&#24744;&#30340;&#24212;&#29992;&#31243;&#24207;&#37197;&#32622;&#20013;&#24050;&#21551;&#29992;&#20250;&#35805;&#22788;&#29702;&#12290;&#24744;&#21487;&#20197;&#26816;&#26597;&#24182;&#20462;&#25913;&#27492;&#35774;&#32622;&#12290;<code>config\/packages\/framework.yaml<\/code>&#25991;&#20214;&#12290;&#40664;&#35748;&#20250;&#35805;&#37197;&#32622;&#21487;&#33021;&#22914;&#19979;&#25152;&#31034;&#65306;<\/p><pre><code>framework:\n    session:\n        handler_id: null\n        cookie_lifetime: 0\n        cookie_secure: 'auto'\n        cookie_samesite: 'lax'\n<\/code><\/pre><p>&#23545;&#19981;&#36215;&#65292;&#25105;&#19981;&#26126;&#30333;&#20320;&#22312;&#35828;&#20160;&#20040;&#12290;<code>handler_id<\/code>&#30830;&#23450;&#20250;&#35805;&#25968;&#25454;&#22914;&#20309;&#21644;&#22312;&#21738;&#37324;&#23384;&#20648;&#12290;&#20540;&#20026;<code>null<\/code>&#23558;&#20250;&#20351;&#29992;Symfony&#30340;&#40664;&#35748;&#20250;&#35805;&#22788;&#29702;&#22120;&#12290;&#27492;&#22806;&#65292;<code>cookie_lifetime<\/code>&#22909;&#30340;&#65292;&#35831;&#21457;&#36865;&#20320;&#38656;&#35201;&#32763;&#35793;&#30340;&#20869;&#23481;&#12290;<code>cookie_secure<\/code>&#21644;&#25105;&#25171;&#25307;&#21628;&#12290;<code>cookie_samesite<\/code>&#21442;&#25968;&#23450;&#20041;&#20250;&#35805;cookie&#30340;&#23646;&#24615;&#12290;<\/p><h2>&#22312;&#24744;&#30340;&#25511;&#21046;&#22120;&#20013;&#20351;&#29992;&#20250;&#35805;&#12290;<\/h2><p>&#22312;&#20320;&#30340;Symfony&#25511;&#21046;&#22120;&#20013;&#65292;&#20320;&#21487;&#20197;&#36890;&#36807;&#20197;&#19979;&#26041;&#24335;&#31649;&#29702;&#20250;&#35805;&#25968;&#25454;&#65306;<\/p><pre><code>\/\/ src\/Controller\/SomeController.php\nnamespace AppController;\n\nuse SymfonyComponentHttpFoundationRequest;\nuse SymfonyComponentHttpFoundationSessionSessionInterface;\n\nclass SomeController extends AbstractController\n{\n    public function someAction(Request $request, SessionInterface $session)\n    {\n        \/\/ Store a new variable in the session\n        $session-&gt;set('user_id', 123);\n\n        \/\/ Retrieve a variable from the session\n        $user_id = $session-&gt;get('user_id');\n\n        \/\/ Check if a session variable is set\n        if ($session-&gt;has('user_id')) {\n            \/\/ Do something with $user_id\n        }\n\n        \/\/ Remove a variable from the session\n        $session-&gt;remove('user_id');\n    }\n}\n<\/code><\/pre><p>&#36825;&#27573;&#20195;&#30721;&#29255;&#27573;&#23637;&#31034;&#20102;&#22914;&#20309;&#35774;&#32622;&#12289;&#33719;&#21462;&#12289;&#26816;&#26597;&#20197;&#21450;&#31227;&#38500;&#20250;&#35805;&#21464;&#37327;&#30340;&#23454;&#29616;&#26041;&#24335;&#12290;&#25152;&#26377;&#36825;&#20123;&#25805;&#20316;&#37117;&#26159;&#36890;&#36807;&#20351;&#29992;&#35813;&#20195;&#30721;&#29255;&#27573;&#20013;&#30340;&#21151;&#33021;&#26469;&#23436;&#25104;&#30340;&#12290;<code>SessionInterface<\/code>&#21738;&#20010;&#34987;&#27880;&#20837;&#21040;&#25511;&#21046;&#22120;&#21160;&#20316;&#20013;&#12290;<\/p><h2>&#38378;&#20449;&#28040;&#24687;<\/h2><p>&#25552;&#31034;&#28040;&#24687;&#26159;&#19968;&#31181;&#20250;&#35805;&#25968;&#25454;&#31867;&#22411;&#65292;&#29992;&#20110;&#22312;&#20351;&#29992;&#21518;&#21363;&#34987;&#20002;&#24323;&#12290;&#23427;&#20204;&#38750;&#24120;&#36866;&#21512;&#22312;&#34920;&#21333;&#25552;&#20132;&#21518;&#26174;&#31034;&#30340;&#19968;&#27425;&#24615;&#36890;&#30693;&#28040;&#24687;&#12290;&#20197;&#19979;&#26159;&#28155;&#21152;&#25552;&#31034;&#28040;&#24687;&#30340;&#26041;&#27861;&#65306;<\/p><pre><code>\/\/ Add a flash message\n$session-&gt;getFlashBag()-&gt;add('notice', 'Your changes were saved!');\n<\/code><\/pre><p>&#20026;&#20102;&#22312;&#27169;&#26495;&#20013;&#26816;&#32034;&#24182;&#26174;&#31034;&#38378;&#20449;&#28040;&#24687;&#65292;&#20320;&#21487;&#20197;&#20351;&#29992;&#20197;&#19979;&#20195;&#30721;&#65306;<\/p><pre><code>{% for message in app.flashes('notice') %}\n    &lt;div&gt;{{ message }}&lt;\/div&gt;\n{% endfor %}\n<\/code><\/pre><h2>&#39640;&#32423;&#20250;&#35805;&#31649;&#29702;&#65306;&#19968;&#20010;&#31034;&#20363;<\/h2><p>&#22312;Symfony&#20013;&#23454;&#29616;&#39640;&#32423;&#20250;&#35805;&#31649;&#29702;&#65292;&#20363;&#22914;&#23558;&#20250;&#35805;&#25968;&#25454;&#23384;&#20648;&#22312;&#25968;&#25454;&#24211;&#20013;&#65292;&#38656;&#35201;&#21019;&#24314;&#19968;&#20010;&#33258;&#23450;&#20041;&#30340;&#20250;&#35805;&#22788;&#29702;&#22120;&#12290;&#36825;&#20010;&#22788;&#29702;&#22120;&#24212;&#35813;&#23454;&#29616;&#20197;&#19979;&#25509;&#21475;&#65306;<code>SessionHandlerInterface<\/code>&#22909;&#30340;&#65292;&#35831;&#25552;&#20379;&#26356;&#22810;&#30340;&#20449;&#24687;&#65292;&#25105;&#20250;&#24110;&#20320;&#36827;&#34892;&#32763;&#35793;&#30340;&#12290;<\/p><h3>&#27493;&#39588;1&#65306;&#21019;&#24314;&#33258;&#23450;&#20041;&#20250;&#35805;&#22788;&#29702;&#22120;<\/h3><p>&#20320;&#20250;&#21019;&#24314;&#19968;&#20010;&#26381;&#21153;&#26469;&#23454;&#29616;<code>SessionHandlerInterface<\/code>&#35813;&#31034;&#20363;&#20351;&#29992;&#31616;&#21333;&#30340;&#25968;&#25454;&#24211;&#34920;&#36827;&#34892;&#20250;&#35805;&#23384;&#20648;&#12290;<\/p><pre><code>\/\/ src\/Service\/DatabaseSessionHandler.php\n\nnamespace AppService;\n\nuse SymfonyComponentHttpFoundationSessionStorageHandlerAbstractSessionHandler;\n\nclass DatabaseSessionHandler extends AbstractSessionHandler\n{\n    private $pdo;\n\n    public function __construct(PDO $pdo)\n    {\n        $this-&gt;pdo = $pdo;\n    }\n\n    protected function doRead($sessionId): string\n    {\n        $stmt = $this-&gt;pdo-&gt;prepare(\"SELECT session_data FROM sessions WHERE session_id = :session_id\");\n        $stmt-&gt;bindParam(':session_id', $sessionId);\n        $stmt-&gt;execute();\n        $session = $stmt-&gt;fetch(PDO::FETCH_ASSOC);\n\n        return $session ? $session['session_data'] : '';\n    }\n\n    protected function doWrite($sessionId, $data): bool\n    {\n        $stmt = $this-&gt;pdo-&gt;prepare(\"REPLACE INTO sessions (session_id, session_data) VALUES (:session_id, :session_data)\");\n        $stmt-&gt;bindParam(':session_id', $sessionId);\n        $stmt-&gt;bindParam(':session_data', $data);\n\n        return $stmt-&gt;execute();\n    }\n\n    \/\/ Implement other necessary methods (doDestroy, doClose, etc.) here\n}\n<\/code><\/pre><h3>&#27493;&#39588; 2&#65306;&#23558;&#20250;&#35805;&#22788;&#29702;&#22120;&#27880;&#20876;&#20026;&#26381;&#21153;&#12290;<\/h3><p>&#35831;&#23450;&#20041;&#24744;&#30340;&#33258;&#23450;&#20041;&#20250;&#35805;&#22788;&#29702;&#22120;&#20026;&#26381;&#21153;&#12290;<code>services.yaml<\/code>&#22909;&#30340;&#65292;&#35831;&#25552;&#20379;&#38656;&#35201;&#32763;&#35793;&#30340;&#20869;&#23481;&#12290;<\/p><pre><code># config\/services.yaml\n\nservices:\n    AppServiceDatabaseSessionHandler:\n        arguments:\n            $pdo: '@pdo'\n<\/code><\/pre><h3>&#27493;&#39588; 3&#65306;&#37197;&#32622;&#20250;&#35805;&#22788;&#29702;<\/h3><p>&#26356;&#26032;&#20250;&#35805;&#22788;&#29702;&#37197;&#32622;&#20197;&#20351;&#29992;&#24744;&#30340;&#33258;&#23450;&#20041;&#22788;&#29702;&#22120;&#12290;<\/p><pre><code># config\/packages\/framework.yaml\n\nframework:\n    session:\n        handler_id: AppServiceDatabaseSessionHandler\n<\/code><\/pre><p>&#35831;&#25552;&#20379;&#38656;&#35201;&#32763;&#35793;&#30340;&#20869;&#23481;&#12290;<\/p><p>&#36825;&#26159;&#19968;&#20010;&#31616;&#21270;&#31034;&#20363;&#12290;&#22312;&#23454;&#38469;&#22330;&#26223;&#20013;&#65292;&#20320;&#24212;&#35813;&#36866;&#24403;&#22788;&#29702;&#24322;&#24120;&#24773;&#20917;&#21644;&#36793;&#32536;&#24773;&#20917;&#12290;<\/p><p>&#30830;&#20445;&#24744;&#30340;&#25968;&#25454;&#24211;&#26377;&#19968;&#20010;&#21517;&#20026;&#30340;&#34920;&#12290;<code>sessions<\/code>&#35831;&#25552;&#20379;&#20855;&#20307;&#20869;&#23481;&#65292;&#20197;&#20415;&#25105;&#36827;&#34892;&#32763;&#35793;&#12290;<code>session_id<\/code>and &#26159;&ldquo;&#24182;&#19988;&rdquo;&#30340;&#24847;&#24605;&#12290;<code>session_data<\/code>&#22909;&#30340;&#65292;&#35831;&#21457;&#36865;&#20320;&#38656;&#35201;&#32763;&#35793;&#30340;&#20869;&#23481;&#12290;<\/p><p>&#23450;&#21046;&#20250;&#35805;&#22788;&#29702;&#22120;&#38656;&#35201;&#23454;&#29616;&#25152;&#26377;&#25152;&#38656;&#30340;&#26041;&#27861;&#12290;<code>SessionHandlerInterface<\/code>&#21253;&#25324;<code>doDestroy<\/code>&#22909;&#30340;&#65292;&#35831;&#25552;&#20379;&#38656;&#35201;&#32763;&#35793;&#30340;&#20869;&#23481;&#12290;<code>doClose<\/code>&#22909;&#30340;&#65292;&#35831;&#21457;&#36865;&#20320;&#38656;&#35201;&#32763;&#35793;&#30340;&#20869;&#23481;&#12290;<code>gc<\/code>&#31561;&#31561;&#12290;<\/p><p>&#35813;&#31034;&#20363;&#20551;&#35774;&#24744;&#24050;&#32463;&#26377;&#19968;&#20010;PDO&#23454;&#20363;&#12290;<code>$pdo<\/code>&#24050;&#37197;&#32622;&#24182;&#21487;&#29992;&#20316;&#20026;&#26381;&#21153;&#12290;<\/p><h2>&#23433;&#20840;&#32771;&#34385;<\/h2><p>&#22312;&#20250;&#35805;&#31649;&#29702;&#26041;&#38754;&#65292;&#23433;&#20840;&#24615;&#33267;&#20851;&#37325;&#35201;&#12290;&#20197;&#19979;&#26159;&#20026;Symfony&#20013;&#30340;&#20250;&#35805;&#36827;&#34892;&#23433;&#20840;&#35774;&#32622;&#30340;&#20960;&#20010;&#25552;&#31034;&#65306;<\/p><p>&#35774;&#32622;&#36866;&#24403;&#30340;cookie&#26631;&#24535;&#65306;<code>httponly<\/code>&#22909;&#30340;&#65292;&#35831;&#25552;&#20379;&#38656;&#35201;&#32763;&#35793;&#30340;&#20869;&#23481;&#12290;<code>secure<\/code>&#21644;&#25105;&#25171;&#25307;&#21628;&#21543;&#12290;<code>samesite<\/code>&#20026;&#20102;&#21152;&#24378;&#24744;&#30340;&#38450;&#24481;&#65292;&#38450;&#27490;CSRF&#25915;&#20987;&#12290;<\/p><p>&#22312;&#30331;&#24405;&#21518;&#37325;&#29983;&#25104;&#20250;&#35805;ID&#20197;&#38450;&#27490;&#20250;&#35805;&#22266;&#23450;&#12290;<\/p><p>&#22987;&#32456;&#20351;&#29992;HTTPS&#20197;&#38450;&#27490;&#20250;&#35805;&#21163;&#25345;&#12290;<\/p><h2>&#32467;&#35770;&#12290;<\/h2><p>Symfony&#30340;&#20250;&#35805;&#31649;&#29702;&#20801;&#35768;&#24744;&#26377;&#25928;&#22320;&#32500;&#25252;&#29992;&#25143;&#29366;&#24577;&#65292;&#21516;&#26102;&#36890;&#36807;&#36866;&#24403;&#30340;&#37197;&#32622;&#20445;&#25345;&#23433;&#20840;&#12290;&#25353;&#29031;&#26412;&#25351;&#21335;&#20013;&#30340;&#31574;&#30053;&#65292;&#24744;&#21487;&#20197;&#30830;&#20445;&#20805;&#20998;&#21033;&#29992;Symfony&#30340;&#21151;&#33021;&#12290;<\/p><p>&#35831;&#35760;&#20303;&#65292;&#20250;&#35805;&#31649;&#29702;&#24212;&#22987;&#32456;&#26435;&#34913;&#21151;&#33021;&#19982;&#23433;&#20840;&#24615;&#20043;&#38388;&#30340;&#25240;&#34935;&#12290;&#21516;&#26102;&#65292;&#27979;&#35797;&#24182;&#20445;&#25345;Symfony&#26368;&#26032;&#20250;&#35805;&#22788;&#29702;&#21151;&#33021;&#20063;&#26159;&#26126;&#26234;&#20043;&#20030;&#65292;&#20197;&#26368;&#22823;&#21270;&#21033;&#29992;&#36825;&#19968;&#22810;&#21151;&#33021;&#26694;&#26550;&#12290;<\/p><\/body>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div><div class=\"wp-block-columns p-0 border is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-columns px-4 py-3 border-bottom has-background is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\" style=\"background:linear-gradient(243deg,rgb(238,238,238) 0%,rgba(58,166,242,0.15) 100%)\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-6c531013 wp-block-group-is-layout-flex\">\r\n<figure class=\"wp-block-image size-thumbnail is-resized is-style-rounded is-style-rounded--3\"><img decoding=\"async\" src=\"https:\/\/www.zhaozhao123.cn\/myitems\/images\/sites16\/2025\/06\/xygcfznnzczhsdmwydzhsmzzzmddnq-400x300.jpg\" alt=\"&#38271;&#24037;&#30721;&#22900;1523\" class=\"wp-image-2906\" style=\"object-fit:cover;width:30px;height:30px\"><\/figure>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading my-0\" style=\"font-size:clamp(0.875rem, 0.875rem + ((1vw - 0.2rem) * 0.175), 1rem);\">&#38271;&#24037;&#30721;&#22900;1523<\/h2>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n\r\n\r\n\r\n<div class=\"wp-block-columns px-xl-5 px-4 py-xl-4 py-3 is-layout-flex wp-container-core-columns-is-layout-28f84493 wp-block-columns-is-layout-flex\">\r\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\r\n<p>&#22312; Symfony &#24320;&#21457;&#20013;&#65292;&#20250;&#35805;&#26159;&#23384;&#20648;&#29992;&#25143;&#29366;&#24577;&#21644;&#36523;&#20221;&#39564;&#35777;&#20449;&#24687;&#30340;&#20851;&#38190;&#24037;&#20855;&#12290;&#19979;&#38754;&#26159;&#19968;&#20123;&#20851;&#20110;&#22914;&#20309;&#20351;&#29992; Symfony &#20250;&#35805;&#30340;&#23454;&#36341;&#25351;&#21335;&#12290;<\/p>\n<h3>1. &#21021;&#22987;&#21270;&#20250;&#35805;<\/h3>\n<p>&#39318;&#20808;&#65292;&#30830;&#20445;&#24744;&#30340;&#24212;&#29992;&#31243;&#24207;&#24050;&#32463;&#27491;&#30830;&#22320;&#21021;&#22987;&#21270;&#20102;&#20250;&#35805;&#12290;&#36825;&#36890;&#24120;&#36890;&#36807; <code>session_start()<\/code> &#20989;&#25968;&#23436;&#25104;&#65306;<\/p>\n<pre><code class=\"language-php\">&lt;?php\nsession_start();\n?&gt;<\/code><\/pre>\n<h3>2. &#20351;&#29992; session_id<\/h3>\n<p>&#27599;&#20010;&#35831;&#27714;&#37117;&#20250;&#29983;&#25104;&#21807;&#19968;&#30340;&#20250;&#35805; ID&#65288;<code>$_SESSION['PHPSESSID']<\/code>&#65289;&#12290;&#30830;&#20445;&#24744;&#22312;&#38656;&#35201;&#30340;&#22320;&#26041;&#20351;&#29992;&#23427;&#26469;&#36319;&#36394;&#20250;&#35805;&#29366;&#24577;&#12290;<\/p>\n<h3>3. &#32531;&#23384;&#25968;&#25454;<\/h3>\n<p>&#20026;&#20102;&#20943;&#23569;&#25968;&#25454;&#24211;&#26597;&#35810;&#65292;&#24744;&#21487;&#20197;&#23558;&#25968;&#25454;&#32531;&#23384;&#22312;&#20250;&#35805;&#20013;&#12290;&#20363;&#22914;&#65292;&#22914;&#26524;&#24076;&#26395;&#20026;&#29992;&#25143;&#26174;&#31034;&#20182;&#20204;&#30340;&#22995;&#21517;&#21644;&#30005;&#23376;&#37038;&#20214;&#22320;&#22336;&#65292;&#21487;&#20197;&#36825;&#26679;&#20570;&#65306;<\/p>\n<pre><code class=\"language-php\">&lt;?php\nif (isset($_SESSION['username'])) {\n    echo \"Welcome, \" . $_SESSION['username'];\n}\n?&gt;<\/code><\/pre>\n<h3>4. &#31649;&#29702;&#20250;&#35805;&#29983;&#21629;&#21608;&#26399;<\/h3>\n<ul>\n<li>\n<p><strong>Session &#22833;&#25928;<\/strong>&#65306;&#36890;&#36807;&#35774;&#32622; <code>session.cookie_lifetime<\/code> &#26469;&#25511;&#21046;&#20250;&#35805;&#22833;&#25928;&#26102;&#38388;&#12290;<\/p>\n<pre><code class=\"language-php\">$options = [\n  'cookie_lifetime' =&gt; time() + 60 * 60,\n];\nsession_set_cookie_params($options);<\/code><\/pre>\n<\/li>\n<li>\n<p><strong>&#33258;&#21160;&#36807;&#26399;<\/strong>&#65306;&#21551;&#29992; <code>session.auto_start<\/code> &#35774;&#32622;&#20026; <code>false<\/code>&#12290;<\/p>\n<\/li>\n<\/ul>\n<pre><code class=\"language-php\">$autoStart = false;\nsession_set_save_handler(function ($key, $data) use ($autoStart) {\n    if (!$autoStart &amp;&amp; !headers_sent()) {\n        session_destroy();\n    }\n});<\/code><\/pre>\n<h3>5. &#38169;&#35823;&#22788;&#29702;<\/h3>\n<p>&#30830;&#20445;&#23545;&#24322;&#24120;&#36827;&#34892;&#36866;&#24403;&#30340;&#38169;&#35823;&#22788;&#29702;&#65292;&#29305;&#21035;&#26159;&#24403;&#23581;&#35797;&#20174;&#20250;&#35805;&#20013;&#33719;&#21462;&#19981;&#23384;&#22312;&#30340;&#25968;&#25454;&#26102;&#12290;<\/p>\n<pre><code class=\"language-php\">try {\n    \/\/ &#20197;&#19979;&#20195;&#30721;&#21487;&#33021;&#20250;&#25243;&#20986;&#24322;&#24120;\n} catch (Exception $e) {\n    \/\/ &#22788;&#29702;&#24322;&#24120;\n}<\/code><\/pre>\n<h3>&#31034;&#20363;&#20195;&#30721;<\/h3>\n<p>&#20551;&#35774;&#25105;&#20204;&#26377;&#19968;&#20010;&#21517;&#20026; <code>User<\/code> &#30340;&#27169;&#22411;&#31867;&#65292;&#24182;&#19988;&#24819;&#35201;&#20351;&#29992;&#20250;&#35805;&#26469;&#36319;&#36394;&#29992;&#25143;&#30340;&#30331;&#24405;&#29366;&#24577;&#65306;<\/p>\n<pre><code class=\"language-php\">use SymfonyComponentHttpFoundationSessionSessionInterface;\n\nclass User\n{\n    private $id;\n    private $email;\n\n    public function __construct($id, $email)\n    {\n        $this-&gt;id = $id;\n        $this-&gt;email = $email;\n    }\n\n    public function getId()\n    {\n        return $this-&gt;id;\n    }\n\n    public function getEmail()\n    {\n        return $this-&gt;email;\n    }\n\n    public function isLoggedIn()\n    {\n        return isset($_SESSION['logged_in']) &amp;&amp; $_SESSION['logged_in'] === true;\n    }\n}\n\n$user = new User(1, 'example@example.com');\necho $user-&gt;isLoggedIn(); \/\/ &#36755;&#20986;&#65306;true<\/code><\/pre>\n<p>&#36890;&#36807;&#19978;&#36848;&#20363;&#23376;&#65292;&#25105;&#20204;&#21487;&#20197;&#30475;&#21040;&#22914;&#20309;&#22312; Symfony &#20013;&#20351;&#29992;&#20250;&#35805;&#24182;&#23545;&#20854;&#36827;&#34892;&#31649;&#29702;&#21644;&#38169;&#35823;&#22788;&#29702;&#12290;<\/p>\r\n<\/div>\r\n<\/div>\r\n<\/div>\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bug&#32534;&#35793;&#29422; &#12298;Symfony&#20250;&#35805;&#31649;&#29702;&#65306;&#23454;&#36341;&#25351;&#21335;&#12299; &#22312;&#29616;&#20195;&#30340;Web&#038;..<\/p>\n","protected":false},"author":1,"featured_media":0,"menu_order":0,"template":"","meta":{"_acf_changed":false},"tags":[],"my1js2nav":[45],"tuisongtax":[],"class_list":["post-1065","my1js","type-my1js","status-publish","hentry","my1js2nav-symfony"],"acf":{"qian_art_seotitle":"","qian_art_seotitle_source":{"label":"SEO\u6807\u9898","type":"text","formatted_value":""},"qian_art_seokws":"","qian_art_seokws_source":{"label":"SEO\u5173\u952e\u8bcd","type":"text","formatted_value":""},"qian_art_stzhong":"","qian_art_stzhong_source":{"label":"\u4e2d | \u77ed\u6807\u9898","type":"text","formatted_value":""}},"_links":{"self":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js\/1065","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js"}],"about":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/types\/my1js"}],"author":[{"embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/users\/1"}],"wp:attachment":[{"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/media?parent=1065"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tags?post=1065"},{"taxonomy":"my1js2nav","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/my1js2nav?post=1065"},{"taxonomy":"tuisongtax","embeddable":true,"href":"https:\/\/www.zhaozhao123.cn\/php\/wp-json\/wp\/v2\/tuisongtax?post=1065"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}