{"id":1164420,"date":"2026-08-03T10:15:19","date_gmt":"2026-08-03T09:15:19","guid":{"rendered":"https:\/\/babelgroup.com\/?p=1164420"},"modified":"2026-08-03T10:38:47","modified_gmt":"2026-08-03T09:38:47","slug":"duplicacao-de-separadores-um-risco-silencioso-que-pode-custar-caro","status":"publish","type":"post","link":"https:\/\/babelgroup.com\/pt-pt\/duplicacao-de-separadores-um-risco-silencioso-que-pode-custar-caro\/","title":{"rendered":"Duplica\u00e7\u00e3o de separadores: Um risco silencioso que pode custar caro."},"content":{"rendered":"<div class=\"vgblk-rw-wrapper limit-wrapper\">\n<p><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-9806873c564101e2b219e7f3f40adf7b\"><strong>1. Introdu\u00e7\u00e3o<\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-955f8463f233b40118fdc3dbbd6b97c4\">Existe um tipo de erro que raramente \u00e9 identificado durante os testes. N\u00e3o resulta de c\u00f3digo incorreto, de uma valida\u00e7\u00e3o em falta ou de uma falha de rede. Pode surgir quando um utilizador faz algo t\u00e3o simples como duplicar um separador do navegador.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-581b7c6f400633d153c05034f5a731f5\">Ao duplicar um separador, o navegador copia o sessionStorage do separador original. Ambos partem, assim, com a mesma sess\u00e3o, vari\u00e1veis e contexto. A partir desse momento, por\u00e9m, evoluem de forma independente: as altera\u00e7\u00f5es realizadas num separador n\u00e3o ficam vis\u00edveis no outro, e o servidor pode n\u00e3o reconhecer que existem duas inst\u00e2ncias da mesma sess\u00e3o em execu\u00e7\u00e3o.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-0b87e9e2e02355a00a7087b5da608df6\">Nas aplica\u00e7\u00f5es OutSystems, sobretudo quando existem processos BPT, opera\u00e7\u00f5es de longa dura\u00e7\u00e3o e vari\u00e1veis de sess\u00e3o, esta situa\u00e7\u00e3o pode provocar encomendas duplicadas, fluxos inconsistentes ou a\u00e7\u00f5es executadas mais do que uma vez.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-0de900faf7840da3dd5d0fac73e86794\">Para ilustrar o problema, utilizaremos a MyBTD, uma plataforma fict\u00edcia de supermercado online atrav\u00e9s da qual os clientes realizam encomendas e os respons\u00e1veis de loja gerem stock e fornecedores.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-513708a17d2d1d4f19a7df814413edf1\"><strong>2. O problema: estados de sess\u00e3o divergentes<\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-ff44366e9f262ffe748e5d86d9a2d4ac\">Dois separadores duplicados come\u00e7am com o mesmo estado, mas deixam de comunicar entre si assim que o utilizador interage com um deles.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-a9ff976fbb67d25c4865ad15aab00cc7\">Esta diverg\u00eancia acontece silenciosamente, sem apresentar erros ou avisos, e pode originar:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-black-color has-text-color has-link-color wp-elements-d3385e9ce8e7e3ec90c3309534e0d98d\"><strong>Submiss\u00f5es duplicadas:<\/strong> a mesma encomenda ou processo \u00e9 executado duas vezes.<\/li>\n\n\n\n<li class=\"has-black-color has-text-color has-link-color wp-elements-998d178cf6b9eb1616e24c9f0d20b9fe\"><strong>Fluxos interrompidos:<\/strong> um processo iniciado num separador \u00e9 continuado ou cancelado noutro.<\/li>\n\n\n\n<li class=\"has-black-color has-text-color has-link-color wp-elements-4a824509a29eefbd7cfca0b632759551\"><strong>Informa\u00e7\u00e3o desatualizada:<\/strong> cada separador apresenta um estado diferente.<\/li>\n\n\n\n<li class=\"has-black-color has-text-color has-link-color wp-elements-712515b870d945cf7475a30afb067e02\"><strong>Utiliza\u00e7\u00e3o incorreta de tokens:<\/strong> identificadores BPT ou outros dados de servidor s\u00e3o partilhados entre ambos.<\/li>\n<\/ul>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-abe3d1c43b40efb0aa0c1c931b122945\">Normalmente, estes problemas apenas se tornam vis\u00edveis em produ\u00e7\u00e3o, quando j\u00e1 provocaram consequ\u00eancias operacionais ou financeiras.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-a5ca23158132fdbd7a158ff38ee4f276\"><strong>3. Como detetar um separador duplicado<\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-2a30a1d0783ff2c4fd0456d908d2bcf2\">Uma dete\u00e7\u00e3o fi\u00e1vel pode ser feita atrav\u00e9s da combina\u00e7\u00e3o de dois comportamentos do navegador.<\/p>\n\n\n\n<p><strong>sessionStorage<\/strong><strong><\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-dd1cfdab0ed251b5a2a9f2293ba0fa95\">Quando um separador \u00e9 duplicado, todo o conte\u00fado do sessionStorage \u00e9 copiado. Assim, um TabId criado no separador original tamb\u00e9m estar\u00e1 presente no duplicado.<\/p>\n\n\n\n<p><strong>window.name<\/strong><strong><\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-2dfd853ae7874c64f10aaf27bdf17433\">A propriedade window.name mant\u00e9m-se durante a navega\u00e7\u00e3o no mesmo separador, mas n\u00e3o \u00e9 copiada quando este \u00e9 duplicado. O novo separador come\u00e7a com esta propriedade vazia.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-f39d4e69cb2b15ac78ced7e52fb6d069\">A regra de dete\u00e7\u00e3o \u00e9, portanto:<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-57c976d2846cd8c4d2b7de5958581a8b\">sessionStorage cont\u00e9m um TabId e window.name est\u00e1 vazio \u2192 <strong>separador duplicado<\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-bcda42244fdfabde14180140464dd37e\">Quando esta situa\u00e7\u00e3o \u00e9 identificada, o mecanismo pode:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-black-color has-text-color has-link-color wp-elements-bc1cb0b4a0d68a90cad071f09d0b932c\">Registar o TabId original.<\/li>\n\n\n\n<li class=\"has-black-color has-text-color has-link-color wp-elements-1c148b3e05e7f54d04c23999ed32a4a9\">Gerar um novo identificador para o separador duplicado.<\/li>\n\n\n\n<li class=\"has-black-color has-text-color has-link-color wp-elements-65f7a9d756a175723c1c2dab943b0592\">Comunicar o evento ao servidor atrav\u00e9s de uma API REST.<\/li>\n\n\n\n<li class=\"has-black-color has-text-color has-link-color wp-elements-3922cb5cb6ebbf7f298154b487a0a9b8\">Definir o window.name para evitar novas dete\u00e7\u00f5es ap\u00f3s uma atualiza\u00e7\u00e3o.<\/li>\n\n\n\n<li class=\"has-black-color has-text-color has-link-color wp-elements-fea2939c149481b876dfd0e0673904d6\">Impedir o registo repetido do mesmo evento num curto per\u00edodo.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"796\" src=\"https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/07\/grafico_03-1024x796.png\" alt=\"\" class=\"wp-image-1164464\" style=\"width:475px;height:auto\" srcset=\"https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/07\/grafico_03-1024x796.png 1024w, https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/07\/grafico_03-300x233.png 300w, https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/07\/grafico_03-768x597.png 768w, https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/07\/grafico_03.png 1500w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-small-font-size\">Figura 1 &#8211; <em>Na MyBTD, o Web Block TABDetection garante esta prote\u00e7\u00e3o em navegadores comuns baseados em Chromium (como Google Chrome e Microsoft Edge), com poss\u00edveis limita\u00e7\u00f5es no Firefox devido ao sessionStorage.<\/em><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-c5987517847423814a4c433fa876bddd\"><strong>4. Estrat\u00e9gias de Mitiga\u00e7\u00e3o:<\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-4611a372ef77e54454baa1d7c2b64105\">A dete\u00e7\u00e3o, por si s\u00f3, n\u00e3o evita o problema. \u00c9 necess\u00e1rio definir o que acontece quando um separador duplicado \u00e9 identificado.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-26c78cf87d352e8fbb812aa332740d74\"><strong>Op\u00e7\u00e3o A &#8211; Bloquear o separador duplicado<\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-bff793a70e17b02c7cae2c33e8324258\"><strong>Recomendada para processos cr\u00edticos.<\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-d18cac6306faf3467e8cc1e25f546898\">O novo separador \u00e9 imediatamente redirecionado para uma p\u00e1gina de erro, enquanto o original continua a funcionar normalmente.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-4e41179704333080af5ae4abd9d76c2e\">Esta abordagem \u00e9 especialmente adequada para checkout, pagamentos ou submiss\u00f5es importantes. Por exemplo, se um cliente duplicar o separador durante o pagamento, apenas o original poder\u00e1 concluir a encomenda, evitando cobran\u00e7as em duplicado.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-01d1d29333841054bab96ca1feed27b4\">A mensagem apresentada deve ser simples e clara:<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-67304a31cc0d7c5751814b2fc0f886b4\">Esta opera\u00e7\u00e3o j\u00e1 se encontra aberta noutro separador. Continue nesse separador.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-a43ee043a44e48aa92d09570732d835b\"><strong>Op\u00e7\u00e3o B &#8211; Sincroniza\u00e7\u00e3o com BroadcastChannel<\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-e93c87eee94895ed32604dfdb388d708\"><strong>Adequada para dashboards e ecr\u00e3s de consulta.<\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-19968463b76b3838357fbc4385fd8144\">Nem todos os casos exigem o bloqueio do separador. Em ecr\u00e3s predominantemente informativos, pode ser suficiente manter os dados sincronizados.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-85862f1f6ba4a67cd59a1046c5b4e5d3\">A API BroadcastChannel permite que v\u00e1rios separadores da mesma origem comuniquem entre si em tempo real. Quando um deles recebe ou altera informa\u00e7\u00e3o, pode notificar os restantes para que atualizem os seus dados.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-5474add59c10a4e2ddf5309b4fbde412\">Num dashboard de stock, por exemplo, uma atualiza\u00e7\u00e3o recebida num separador pode ser comunicada aos outros, evitando decis\u00f5es baseadas em informa\u00e7\u00e3o desatualizada.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-107e82c615f83a1412d6cbc0d3e84e2c\"><strong>Op\u00e7\u00e3o C &#8211; localStoragecomo fonte \u00fanica de verdade<\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-d7fdab863c59ccba4039fea6b8968986\"><strong>Indicada para estados simples partilhados entre separadores.<\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-22ce63e0f64e2f0ac43590c41002f1ae\">Ao contr\u00e1rio do sessionStorage, o localStorage \u00e9 comum a todos os separadores da mesma origem. Pode, por isso, ser utilizado para guardar um estado partilhado, acompanhado por um mecanismo que determine qual dos separadores pode alter\u00e1-lo.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-1dc28d83c75ef312d7a0e84222326ea7\">Num cesto de compras, por exemplo, uma altera\u00e7\u00e3o realizada num separador pode ser detetada pelos restantes. Estes podem apresentar uma mensagem e voltar a carregar o estado mais recente.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-1f07f61f329edeffe439e977557a5a12\">Esta op\u00e7\u00e3o \u00e9 simples e evita pedidos adicionais ao servidor, embora exija cuidados para prevenir altera\u00e7\u00f5es simult\u00e2neas.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" width=\"1024\" height=\"705\" src=\"https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/07\/grafico_01-1024x705.png\" alt=\"\" class=\"wp-image-1164468\" style=\"aspect-ratio:1.4525764822669434;width:524px;height:auto\" srcset=\"https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/07\/grafico_01-1024x705.png 1024w, https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/07\/grafico_01-300x207.png 300w, https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/07\/grafico_01-768x529.png 768w, https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/07\/grafico_01-1536x1058.png 1536w, https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/07\/grafico_01.png 1551w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-small-font-size\">Figura 2 &#8211; <em>Eficaz para uma sincroniza\u00e7\u00e3o ligeira do estado, sem pedidos de ida e volta ao servidor.<\/em><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-e736702a624e1ae6cacb530fe9e077b7\"><strong>Op\u00e7\u00e3o D &#8211; Valida\u00e7\u00e3o do TabId no servidor<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" width=\"1024\" height=\"629\" src=\"https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/07\/grafico_02-1024x629.png\" alt=\"\" class=\"wp-image-1164472\" style=\"width:536px;height:auto\" srcset=\"https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/07\/grafico_02-1024x629.png 1024w, https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/07\/grafico_02-300x184.png 300w, https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/07\/grafico_02-768x472.png 768w, https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/07\/grafico_02-1536x944.png 1536w, https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/07\/grafico_02.png 1897w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-small-font-size\">Figura 3 &#8211; <em>A solu\u00e7\u00e3o mais robusta para processos cr\u00edticos, regulados ou auditados.<\/em><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-06fa9ca41c0296c6b2ef351d1895577c\">Os controlos no navegador podem ser contornados. Para garantir a integridade de um processo, a valida\u00e7\u00e3o deve tamb\u00e9m ser realizada no servidor.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-5dc6c5ced22f452b8acd4dd3f7bb58e3\">O TabId \u00e9 enviado em cada pedido relevante, e o servidor confirma se o separador \u00e9 o propriet\u00e1rio autorizado da inst\u00e2ncia do processo. Os pedidos enviados por outros separadores s\u00e3o rejeitados.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-214c315305f50e780c07ec5096160b9a\">Em OutSystems, o identificador pode ser guardado numa vari\u00e1vel de sess\u00e3o ou num atributo do processo e validado em a\u00e7\u00f5es como:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-black-color has-text-color has-link-color wp-elements-168f9e5eacc9ef1f7db56329d0e0b115\">In\u00edcio de processos BPT.<\/li>\n\n\n\n<li class=\"has-black-color has-text-color has-link-color wp-elements-8f58b929d96c5f4ad2936aa863a14428\">Submiss\u00e3o de formul\u00e1rios.<\/li>\n\n\n\n<li class=\"has-black-color has-text-color has-link-color wp-elements-e76f61cef4e05aae70fc3703e1a73b9f\">Aprova\u00e7\u00e3o de etapas.<\/li>\n\n\n\n<li class=\"has-black-color has-text-color has-link-color wp-elements-280bc20991beea82d25c7d2520be97db\">Grava\u00e7\u00e3o de dados.<\/li>\n\n\n\n<li class=\"has-black-color has-text-color has-link-color wp-elements-7b054ff71374a1b15bb0c61d07df9fba\">Cria\u00e7\u00e3o de encomendas ou ordens de compra.<\/li>\n<\/ul>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-a03b839cf7d10e6924a8f8a9b6617254\">Esta op\u00e7\u00e3o acrescenta complexidade, mas oferece o n\u00edvel mais elevado de prote\u00e7\u00e3o.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-41b7b27c04d6cfbe3466fa2e310a62f5\"><strong>5. Compara\u00e7\u00e3o das estrat\u00e9gias<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"625\" src=\"https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/grafico_04-1024x625.png\" alt=\"\" class=\"wp-image-1164542\" style=\"aspect-ratio:1.638453500522466;width:524px;height:auto\" srcset=\"https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/grafico_04-1024x625.png 1024w, https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/grafico_04-300x183.png 300w, https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/grafico_04-768x469.png 768w, https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/grafico_04.png 1296w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"has-small-font-size\"><em>Tabela 1 &#8211; Compara\u00e7\u00e3o das estrat\u00e9gias de mitiga\u00e7\u00e3o de separadores duplicados.<\/em><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-aec16496faf605a088d2ec3a9633d90c\"><strong>6. Recomenda\u00e7\u00e3o<\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-df581ee05ff8c7d70e807ae7435ad22b\">Para uma aplica\u00e7\u00e3o transacional como a MyBTD, recomenda-se a combina\u00e7\u00e3o das op\u00e7\u00f5es A e D.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-83e93cc1c2feb81ac255433dce365f8c\">O Web Block TABDetection pode bloquear rapidamente os separadores duplicados nos ecr\u00e3s que iniciam ou fazem avan\u00e7ar processos. Em paralelo, a valida\u00e7\u00e3o do TabId no servidor deve proteger as a\u00e7\u00f5es mais cr\u00edticas, como o in\u00edcio de BPT, a submiss\u00e3o de processos e a grava\u00e7\u00e3o de dados.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-c8a2636ff4979103dca746ac8dffded7\">Esta abordagem cria uma prote\u00e7\u00e3o em v\u00e1rias camadas:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li class=\"has-black-color has-text-color has-link-color wp-elements-399f1038d003165507c9826f97739146\">O cliente responde rapidamente \u00e0s situa\u00e7\u00f5es mais comuns.<\/li>\n\n\n\n<li class=\"has-black-color has-text-color has-link-color wp-elements-81665631d4b3aa8e3aeece9e91b37ac3\">O servidor garante a integridade do processo.<\/li>\n\n\n\n<li class=\"has-black-color has-text-color has-link-color wp-elements-93c42e54450536195f39c1a4259210e7\">Cada mecanismo funciona de forma independente.<\/li>\n<\/ul>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-da9e71f72a340a494fe287b8ada0926b\"><strong>7. Conclus\u00e3o<\/strong><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-6a0be6f7ad69254889c221cf53c55ed5\">A duplica\u00e7\u00e3o de separadores pode parecer um comportamento inofensivo, mas, em aplica\u00e7\u00f5es com estado e processos transacionais, pode originar encomendas repetidas, informa\u00e7\u00e3o inconsistente ou fluxos executados duas vezes.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-a667ecbda717e62d063c79574277fb37\">A melhor abordagem consiste em detetar a duplica\u00e7\u00e3o nos ecr\u00e3s relevantes, bloquear o novo separador quando o risco \u00e9 elevado e aplicar valida\u00e7\u00f5es no servidor nas opera\u00e7\u00f5es mais cr\u00edticas.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color wp-elements-f12dd71fa949610e656bc7a12b7ac90a\">Os utilizadores que nunca duplicarem um separador n\u00e3o notar\u00e3o qualquer diferen\u00e7a. Os que o fizerem receber\u00e3o uma mensagem clara, em vez de provocarem silenciosamente uma situa\u00e7\u00e3o dif\u00edcil de reproduzir e resolver.<\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color has-small-font-size wp-elements-f817df186be196dfc78e263582ddd26b\"><em>Henrique S.<\/em><\/p>\n\n\n\n<p class=\"has-black-color has-text-color has-link-color has-small-font-size wp-elements-f8bc39cfbe643ef2c6e58bcf7a217b06\"><em>OutSystems Tech Lead na Babel<\/em><\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"400\" height=\"400\" src=\"https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/HS-OS-Babel.jpg\" alt=\"\" class=\"wp-image-1164546\" style=\"width:116px;height:auto\" srcset=\"https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/HS-OS-Babel.jpg 400w, https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/HS-OS-Babel-300x300.jpg 300w, https:\/\/babelgroup.com\/wp-content\/uploads\/2026\/08\/HS-OS-Babel-150x150.jpg 150w\" sizes=\"(max-width: 400px) 100vw, 400px\" \/><\/figure>\n\n\n\n<p><\/p>\n<\/div><!-- .vgblk-rw-wrapper -->","protected":false},"excerpt":{"rendered":"<p>1. Introdu\u00e7\u00e3o Existe um tipo de erro que raramente \u00e9 identificado durante os testes. N\u00e3o resulta de c\u00f3digo incorreto, de uma valida\u00e7\u00e3o em falta ou de uma falha de rede. Pode surgir quando um utilizador faz algo t\u00e3o simples como duplicar um separador do navegador. Ao duplicar um separador, o navegador copia o sessionStorage do&#8230;<\/p>\n","protected":false},"author":17,"featured_media":1164477,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[413,416],"tags":[],"class_list":["post-1164420","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-development-4","category-noticias-2"],"acf":[],"_links":{"self":[{"href":"https:\/\/babelgroup.com\/pt-pt\/wp-json\/wp\/v2\/posts\/1164420","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/babelgroup.com\/pt-pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/babelgroup.com\/pt-pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/babelgroup.com\/pt-pt\/wp-json\/wp\/v2\/users\/17"}],"replies":[{"embeddable":true,"href":"https:\/\/babelgroup.com\/pt-pt\/wp-json\/wp\/v2\/comments?post=1164420"}],"version-history":[{"count":20,"href":"https:\/\/babelgroup.com\/pt-pt\/wp-json\/wp\/v2\/posts\/1164420\/revisions"}],"predecessor-version":[{"id":1164561,"href":"https:\/\/babelgroup.com\/pt-pt\/wp-json\/wp\/v2\/posts\/1164420\/revisions\/1164561"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/babelgroup.com\/pt-pt\/wp-json\/wp\/v2\/media\/1164477"}],"wp:attachment":[{"href":"https:\/\/babelgroup.com\/pt-pt\/wp-json\/wp\/v2\/media?parent=1164420"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/babelgroup.com\/pt-pt\/wp-json\/wp\/v2\/categories?post=1164420"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/babelgroup.com\/pt-pt\/wp-json\/wp\/v2\/tags?post=1164420"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}